如果没有引用Microsoft.AspNetCore.StaticFiles,需要先引用。不过一般.Net Core项目都已经包含了。

    使用NuGet命令添加Microsoft.AspNetCore.StaticFiles引用:

    Install-Package Microsoft.AspNetCore.StaticFiles

    添加好引用以后,在Startup.cs中的Configure方法下添加如下代码:

    1. public void Configure(IApplicationBuilder app)
    2. {
    3. app.UseStaticFiles();//使用默认文件夹wwwroot
    4. app.Run(async (context) =>
    5. {
    6. await context.Response.WriteAsync("Hello World!");
    7. });
    8. }

    接着在wwwroot文件夹(没有的话可以自己新建一个文件夹,取名wwwroot)中添加一张图:NET-Core.png。

    程序运行后访问http://localhost:端口号/NET-Core.png ,就会在页面上显示这张图片

    如果不想使用默认wwwroot文件夹,可以使用StaticFileOptions来设置指定目录

    具体代码如下:

    1. public void Configure(IApplicationBuilder app)
    2. {
    3. //更改默认文件夹 (StaticFileOptions方法)
    4. var staticfile = new StaticFileOptions();
    5. staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录,这里指C盘,也可以是其他目录
    6. app.UseStaticFiles(staticfile);
    7. app.Run(async (context) =>
    8. {
    9. await context.Response.WriteAsync("Hello World!");
    10. });
    11. }

    然后在C盘新建一个readme.txt文件,在里面写入.net core,

    程序运行后访问: http://localhost:*/readme.txt,如下图所示:

    .NET Core | 实现简单文件服务器 - 图1

    成功浏览readme.txt文件。

    如果我们需要浏览所有文件夹及文件,就要用到UseDirectoryBrowser, 下面代码是浏览C盘的所有文件:

    1. public void ConfigureServices(IServiceCollection services)
    2. {
    3. //使用UseDirectoryBrowser ,需要在这里加入services.AddDirectoryBrowser();
    4. services.AddDirectoryBrowser();
    5. }
    6. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    7. public void Configure(IApplicationBuilder app)
    8. {
    9. //app.UseStaticFiles();//使用默认文件夹wwwroot
    10. var dir = new DirectoryBrowserOptions();
    11. dir.FileProvider = new PhysicalFileProvider(@"C:\");
    12. app.UseDirectoryBrowser(dir);
    13. //更改默认文件夹 (StaticFileOptions方法)
    14. var staticfile = new StaticFileOptions();
    15. staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录,这里指C盘,也可以是其他目录
    16. //手动设置MIME Type,或者设置一个默认值, 以解决某些文件MIME Type文件识别不到,出现404错误
    17. staticfile.ServeUnknownFileTypes = true;
    18. staticfile.DefaultContentType = "application/x-msdownload";//设置默认MIME Type
    19. var provider = new FileExtensionContentTypeProvider();//使用一组默认映射创建新的提供程序
    20. provider.Mappings.Add(".log", "text/plain");//手动设置对应MIME Type
    21. staticfile.ContentTypeProvider = provider; //将文件映射到内容类型
    22. app.UseStaticFiles(staticfile);
    23. app.Run(async (context) =>
    24. {
    25. await context.Response.WriteAsync("Hello World!");
    26. });
    27. }

    手动设置MIME Type 是为了防止有些文件MIME Type识别不出来 就会出现404错误。也可以给这些未识别的设置一个默认值解决

    1. 设置好后,对于未识别的,默认为application/x-msdownload,浏览器会下载这些文件,这样.log就被手动设置为文本方式,浏览器会将其展示出来。这样我们也就实现了一个简单的文件服务器。
    2. 如果想用手机查看电脑的图片或者视频等文件,则将程序加一句代码就可以实现了:
    3. Program.cs
    1. public static void Main(string[] args)
    2. {
    3. var host = new WebHostBuilder()
    4. .UseKestrel()
    5. .UseContentRoot(Directory.GetCurrentDirectory())
    6. .UseIISIntegration()
    7. .UseUrls("http://*:5000") //加上这个就能通过http://ip5000访问
    8. .UseStartup<Startup>()
    9. .Build();
    10. host.Run();
    11. }
    1. 这样在同一局域网内,在手机上使用浏览器访问http://ip:5000,就能访问电脑中C盘的文件了.