ASP.NET Core 開發,中間件(StaticFiles)的使用,咱們開發一款簡易的靜態文件服務器。web
告別須要使用文件,又須要安裝一個web服務器。如今隨時隨地打開程序便可使用,跨平臺,方便快捷。服務器
前一篇講解了中間件的開發,瞭解了中間件的知識。app
下面咱們就來使用StaticFiles 開發一款簡易靜態文件服務器。還能夠直接運行純靜態的網站。asp.net
新建的ASP.NET Core 項目,不是空的,也就會自帶StaticFiles 。wwwroot 就是靠這個中間件讀取的。async
新建一個asp.net core項目,選擇空的模板。ide
添加 Microsoft.AspNetCore.StaticFiles 引用網站
Install-Package Microsoft.AspNetCore.StaticFiles -Pre
添加好引用之後,咱們在Startup.cs 添加ui
public void Configure(IApplicationBuilder app) { app.UseStaticFiles();//使用默認文件夾wwwroot app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
咱們在wwwroot 添加一張圖 ASP-NET-Banners-01.pngspa
而後程序運行起來.net
http://localhost:5000/ASP-NET-Banners-01.png
若是我不想使用默認文件夾咋辦呢,咱們能夠使用 StaticFileOptions
public void Configure(IApplicationBuilder app) { var staticfile = new StaticFileOptions(); staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄 app.UseStaticFiles(staticfile); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
我在c盤新建一個readme.txt 寫入 .net core 。
而後訪問: http://localhost:5000/readme.txt
一個文件服務器,應該能夠瀏覽全部文件。
咱們就要用到UseDirectoryBrowser
public void ConfigureServices(IServiceCollection services) { services.AddDirectoryBrowser(); } public void Configure(IApplicationBuilder app) { var dir = new DirectoryBrowserOptions(); dir.FileProvider= new PhysicalFileProvider(@"C:\"); app.UseDirectoryBrowser(dir); var staticfile = new StaticFileOptions(); staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄 app.UseStaticFiles(staticfile); }
這裏要在 ConfigureServices 方法加入
public void ConfigureServices(IServiceCollection services) { services.AddDirectoryBrowser(); }
訪問:http://localhost:5000/
這樣咱們就能瀏覽C盤的文件了。
你會發現有些文件打開會404,有些又能夠打開。那是由於MIME 沒有識別出來。
咱們能夠手動設置這些 MIME ,也能夠給這些未識別的設置一個默認值。
public void Configure(IApplicationBuilder app) { var dir = new DirectoryBrowserOptions(); dir.FileProvider= new PhysicalFileProvider(@"C:\"); app.UseDirectoryBrowser(dir); var staticfile = new StaticFileOptions(); staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目錄 這裏指定C盤,也能夠是其它目錄 staticfile.ServeUnknownFileTypes = true; staticfile.DefaultContentType = "application/x-msdownload"; //設置默認 MIME var provider = new FileExtensionContentTypeProvider(); provider.Mappings.Add(".log", "text/plain");//手動設置對應MIME staticfile.ContentTypeProvider = provider; app.UseStaticFiles(staticfile); }
設置好之後,對於未識別的,默認爲下載。 .log 就被我手動設置成文本方式。
對於前面的這麼多設置,StaticFiles 提供了一種簡便的寫法。UseFileServer
app.UseFileServer(new FileServerOptions() { FileProvider = new PhysicalFileProvider(@"C:\"), EnableDirectoryBrowsing = true });
若是須要加上MIME,StaticFileOptions 須要綁定上。
不知道你們平時有沒有這樣的需求,手機想查看電腦的圖片或者視頻等文件。
這裏咱們將程序稍微加加一句代碼就能夠實現了。
在 Program.cs 中
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseUrls("http://*:5000")//加上這個就能用ip:5000訪問 .UseStartup<Startup>() .Build(); host.Run(); }
在同一局域網內,使用 ip:5000 就能夠訪問。這樣就能訪問電腦的文件。
若是你以爲本文對你有幫助,請點擊「推薦」,謝謝。