new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"webroot")),
RequestPath = new PathString("")
})
SP.NET Core 開發,中間件(StaticFiles)的使用,我們開發一款簡易的靜態文件服務器。
告別需要使用文件,又需要安裝一個web服務器。現在隨時隨地打開程序即可使用,跨平台,方便快捷。
前一篇講解了中間件的開發,了解了中間件的知識。
下面我們就來使用StaticFiles 開發一款簡易靜態文件服務器。還可以直接運行純靜態的網站。
新建的ASP.NET Core 項目,不是空的,也就會自帶StaticFiles 。wwwroot 就是靠這個中間件讀取的。
使用StaticFiles 中間件
新建一個asp.net core項目,選擇空的模板。
添加 Microsoft.AspNetCore.StaticFiles 引用
Install-Package Microsoft.AspNetCore.StaticFiles -Pre
添加好引用以后,我們在Startup.cs 添加
public void Configure(IApplicationBuilder app) { app.UseStaticFiles();//使用默認文件夾wwwroot app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
我們在wwwroot 添加一張圖 ASP-NET-Banners-01.png
然后程序運行起來
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 就可以訪問。這樣就能訪問電腦的文件。