本文章主要說明asp.net core中靜態資源處理方案: 一、靜態文件服務 首先明確contentRoot和webroot這兩個概念 contentRoot:web的項目文件夾,其中包含webroot和其他bin等其他文件夾 webroot:webroot是站點文件夾,可用url訪問的文件夾。預設 ...
本文章主要說明asp.net core中靜態資源處理方案:
一、靜態文件服務
首先明確contentRoot和webroot這兩個概念
- contentRoot:web的項目文件夾,其中包含webroot和其他bin等其他文件夾
- webroot:webroot是站點文件夾,可用url訪問的文件夾。預設為:"contentroot/wwwroot"
- 實現代碼如下
Program中的代碼
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) //設置contentroot .UseWebRoot("mywwwroot") //設置webroot .UseUrls("http://*:5000") //其他電腦可以用ip地址訪問 .Build();
StartUp中的代碼
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles();//開啟靜態文件訪問 //自定義靜態文件訪問 app.UseStaticFiles(new StaticFileOptions(){ FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "mystatic")), RequestPath = new PathString("/sam/static") }); //配置mvc app.UseMvc(routers=>{ routers.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); }
效果圖下圖:
1.1 目錄瀏覽
實現代碼如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseDirectoryBrowser(new DirectoryBrowserOptions(){ FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Controllers")), RequestPath = new PathString("/controller") }); }
1.2 預設文檔
app.UseDefaultFiles方法開啟預設訪問的配置,配置項用DefaultFilesOption類表示,代碼如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //預設文件 DefaultFilesOptions defaultFiles = new DefaultFilesOptions(); defaultFiles.DefaultFileNames.Clear(); defaultFiles.DefaultFileNames.Add("myindex.html"); app.UseDefaultFiles(defaultFiles); app.UseStaticFiles(); //開啟靜態文件訪問 }
註意此配置一定要在所有Use之前,否則設置不生效
1.3 UseFileServer
UserFileServer包含了UseStaticFiles, UseDefaultFiles, UserDirectoryBrowser的功能
app.UseFileServer(new FileServerOptions(){ EnableDefaultFiles, //是否開啟預設文檔 EnableDirectoryBrowsing, //是否開啟目錄瀏覽 DefaultFilesOptions, //預設文件設置 StaticFileOptions, //靜態資源訪問設置 DirectoryBrowserOptions, //目錄瀏覽設置 });
二、靜態文件授權
靜態模塊是不對文件進行許可權檢查的,包含wwwroot下的文件和文件夾。如果相進行許可權控制,可以使用action返回一個FileResult來實現:
private string basePath = Common.Uitls.HostingEnvironment.ContentRootPath; public FileResult Index(int id){ if(id == 1){ return new PhysicalFileResult(Path.Combine(basePath, "aufolder","author.html"), "text/html"); } return new PhysicalFileResult(Path.Combine(basePath, "error.html"), "text/html");; }
三、FileExtensionContentTypeProvider類的使用
此類包含一個將文件擴展名映射到MIME內容類型的集合,代碼如下:
FileExtensionContentTypeProvider provider=new FileExtensionContentTypeProvider(); provider.Mappings.Add(".sam", "text/plain"); //自定義靜態文件訪問 app.UseStaticFiles(new StaticFileOptions(){ FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "mystatic")), RequestPath = new PathString("/sam/static"), ContentTypeProvider = provider });
- FileExtensionContentTypeProvider類與UseStaticFiles關聯使用
- 擴展名以 "." 開頭。
- 運行結果如下: