当前位置:首页 > Web开发 > 正文

14//EnableDirectoryBrowsing = true15//}); ASP.NET Core-静态文件中

2024-03-31 Web开发

  MVC中默认开启静态文件中间件(在Configure要领中 app.UseStaticFiles()),即wwwroot目录(即根目录)下的文件均可以访谒,eg: :5000/img/001.png,其他目录下的静态文件不能访谒(eg:MyStaticFiles),如果注释失app.UseStaticFiles,,wwwroot目录下的文件也不能直接访谒了。

技术图片

2. wwwroot目录外的静态文件的访谒

   在项目目录下新建一个文件夹(MyStaticFiles),里面存放图片等静态文件,这个时候是没法访谒的,需要进行一些配置才华访谒。

  app.UseStaticFiles()中传入StaticFileOptions类,两个参数配置,FileProvider定位到目录,RequestPath设置相对路径,好比设置个"/AAA", 则可以通过: :5000/AAA/img/002.png, 建议和前面定位的目录名称一样,eg“/MyStaticFiles”,则通过: :5000/MyStaticFiles/img/002.png

技术图片

1 app.UseStaticFiles(new StaticFileOptions 2 { 3 FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")), 4 //配置相对路径(建议和前面的名起个一样的,固然也可以起另外,注意前面要有/) 5 RequestPath = "/MyStaticFiles" 6 });

3. 设置静态文件缓存

  通过:ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age=600");进行设置为600秒,通过测试,访谒页面 :5000/Second,  第一次有图片加载,这个时候去吧图片删了,刷新页面,还有图片,说明缓存起了感化。

1 //设置静态文件缓存为600秒,即10分钟 2 app.UseStaticFiles(new StaticFileOptions 3 { 4 OnPrepareResponse = ctx => 5 { 6 ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age=600"); 7 } 8 });

1 <div> 2 <img src="http://www.mamicode.com/~/MyStaticFiles/img/002.png" /> 3 </div>

4. 静态文件授权

 静态文件中间件不供给授权查抄。 可果然访谒由静态文件中间件供给的任何文件,包孕 wwwroot 下的文件。 按照授权供给文件:

  ①:将文件存储在 wwwroot 和静态文件中间件可访谒的任何目录之外。

  ②:通过有授权的操纵要领供给文件,返回 FileResult 东西。

1 [Authorize] 2 public IActionResult BannerImage() 3 { 4 var file = Path.Combine(Directory.GetCurrentDirectory(), 5 "MyStaticFiles", "images", "banner1.svg"); 6 7 return PhysicalFile(file, "image/svg+xml"); 8 }

5. 启用目录浏览

  在ConfigureServices中注册处事:services.AddDirectoryBrowser(); 然后在Configure中对wwwroot下的img文件夹启用目录浏览,相对路径设置为"/img",那么则可以通过 :5000/img/ 进行目录的浏览,并打开文件。

1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.Configure<CookiePolicyOptions>(options => 4 { 5 // This lambda determines whether user consent for non-essential cookies is needed for a given request. 6 options.CheckConsentNeeded = context => true; 7 options.MinimumSameSitePolicy = SameSiteMode.None; 8 }); 9 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); 10 //启用目录浏览 11 services.AddDirectoryBrowser(); 12 } 13    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 14 { 15 //启用目录浏览 16 app.UseDirectoryBrowser(new DirectoryBrowserOptions 17 { 18 FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "img")), 19 RequestPath = "/img" 20 }); 21 }

6. 启用默认文件

  要供给默认文件,必需在 UseStaticFiles 前挪用 UseDefaultFiles。 UseDefaultFiles 实际上用于重写 URL,不供给文件,需通过 UseStaticFiles 启用静态文件中间件来供给文件。

  默认文件的访谒挨次为:default.htm→default.html→index.htm→index.html,且必需放在wwwroot目录下

  如何设置指命名称的默认文件? 好比:myDefault.html

  答:通过DefaultFilesOptions类来实现

1 //启用默认文件(默认定名) 2 //app.UseDefaultFiles(); 3 4 //启用默认文件(指定定名) 5 DefaultFilesOptions options = new DefaultFilesOptions(); 6 options.DefaultFileNames.Clear(); 7 options.DefaultFileNames.Add("myDefault.html"); 8 app.UseDefaultFiles(options); 9 10 //感化于wwwroot目录,即根目录 11 app.UseStaticFiles();

技术图片

运行功效:

技术图片

 7. UseFileServer:启用静态文件、默认文件、目录浏览

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32237.html