api设置访问静态文件
1、默认访问wwwroot目录下文件,可以使用StaticFileOptions设置指定其他目录
基于安全考虑,默认情况下是禁止目录访问功能的。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStaticFiles(); var staticImageFile = new StaticFileOptions(); staticImageFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Image\Image"); app.UseStaticFiles(staticImageFile); var staticFile = new StaticFileOptions(); staticFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Files"); app.UseStaticFiles(staticFile); app.UseOcelot().Wait(); app.UseMvc(); app.Run(async (context)=> { await context.Response.WriteAsync("hello"); }); }
2、如果一个请求是未知的文件类型,静态文件中间件将返回http 404 错误(未找到),比方说.log 文件,FileExtensionContentTypeProvider类包含一个将文件扩展名映射到MIME内容类型的集合。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } var provider = new FileExtensionContentTypeProvider(); provider.Mappings[".log"] = "text/html"; app.UseStaticFiles(new StaticFileOptions() { ContentTypeProvider= provider }); var staticImageFile = new StaticFileOptions(); staticImageFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Image\Image"); app.UseStaticFiles(staticImageFile); var staticFile = new StaticFileOptions(); staticFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Files"); app.UseStaticFiles(staticFile); app.UseOcelot().Wait(); app.UseMvc(); app.Run(async (context)=> { await context.Response.WriteAsync("hello"); }); }
3、静态文件权限问题,默认情况静态文件没有权限,如果重写StaticFileMiddleware,权限控制在Filter中,Filter在中间件后面执行,所以可以重新新建目录,不用设置为静态目录,默认无法直接访问目录,通过访问Controller处理请求
[Route("api/[controller]")] [ApiController] public class FileController : ControllerBase { [HttpGet] [Route("image")] public FileResult GetImage(string name) { var file = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", name); //return PhysicalFile(file, "application/octet-stream"); return PhysicalFile(file, "image/jpg"); } }
http://localhost:50002/api/file/image/?name=image\1.jpg

浙公网安备 33010602011771号