tnblog
首页
视频
资源
登录

.net core 静态文件中间件

8417人阅读 2020/7/31 14:26 总访问:3665265 评论:0 收藏:0 手机
分类: .net后台框架

.netcore

.net core 静态文件中间件

静态文件中间件的能力

  • 支持指定相对路径
  • 支持目录浏览
  • 支持设置默认文档
  • 支持多目录映射

目录结构

支持指定相对路径的访问

Startup.cs
  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. app.UseStaticFiles();
  8. app.UseRouting();
  9. app.UseAuthorization();
  10. app.UseEndpoints(endpoints =>
  11. {
  12. endpoints.MapControllers();
  13. });
  14. }

app.UseStaticFiles();使得 web root(默认为wwwroot)下的文件目录可以被访问。随后将展示如何通过使用 UseStaticFiles 将其他目录下的内容也向外提供服务。


运行测试


默认访问静态文件的index.html

  1. app.UseDefaultFiles();

运行测试

一般默认文件的检索有
default.htm
default.html
index.htm
index.html
可以通过以下代码达到自定义默认路径的效果。

  1. DefaultFilesOptions options = new DefaultFilesOptions();
  2. options.DefaultFileNames.Clear();
  3. //假设我们以 mydefault.html 为检索的对象
  4. options.DefaultFileNames.Add("mydefault.html");
  5. app.UseDefaultFiles(options);

浏览目录

添加目录服务

  1. services.AddDirectoryBrowser();

启用网络应用目录浏览

  1. app.UseDirectoryBrowser();

运行测试

映射其他目录和文件

添加 file 文件夹下的文件

  1. app.UseStaticFiles(new StaticFileOptions {
  2. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),"file"))
  3. });

运行测试

添加自定义路径访问

  1. app.UseStaticFiles(new StaticFileOptions {
  2. RequestPath = "/files",
  3. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),"file"))
  4. });

运行测试

添加到访问目录中去

  1. app.UseDirectoryBrowser(new DirectoryBrowserOptions
  2. {
  3. //推荐使用 new PathString("/files") 的方式
  4. RequestPath = "/files",
  5. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "file"))
  6. });

运行测试

UseFileServer

UseFileServer 集合了 UseStaticFiles、UseDefaultFiles 以及 UseDirectoryBrowser

下面代码启用了静态目录和默认文件,但不允许直接访问目录:

  1. app.UseFileServer();

下面代码启用了静态目录和默认文件,目录浏览的功能:

  1. app.UseFileServer(enableDirectoryBrowsing:true);

如果要指定具体的目录下

  1. app.UseFileServer(new FileServerOptions() {
  2. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),@"flie")),
  3. RequestPath=new PathString("/files"),
  4. EnableDirectoryBrowsing = true
  5. });

在启动浏览目录之前,需要添加services.AddDirectoryBrowser();目录的注册

FileExtensionContentTypeProvider

FileExtensionContentTypeProvider 类内包含一个将文件扩展名映射到 MIME 内容类型的集合。在下面的例子中,多个文件扩展名注册为已知的 MIME 类型,”.rtf” 被替换,”.mp4” 被移除

  1. var provider = new FileExtensionContentTypeProvider();
  2. provider.Mappings[".myapp"] = "application/x-msdownload";
  3. provider.Mappings[".htm3"] = "text/html";
  4. provider.Mappings[".image"] = "image/png";
  5. provider.Mappings[".rtf"] = "application/x-msdownload";
  6. provider.Mappings.Remove(".mp4");
  7. app.UseStaticFiles(new StaticFileOptions
  8. {
  9. RequestPath = "/files",
  10. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "file")),
  11. ContentTypeProvider = provider
  12. });

当我们有其他不可识别 MIME 的时候我们可以默认当作其他类型进行处理。
例如:有不可识别 MIME 的时候,默认让它用 image/png 来识别。

  1. app.UseStaticFiles(new StaticFileOptions
  2. {
  3. ServeUnknownFileTypes =true,
  4. DefaultContentType = "image/png"
  5. });

打造接口服务页

当我们访问接口只希望指定格式为接口,其他访问都为首页时我们可以这样做

  1. app.MapWhen(context =>
  2. {
  3. return !context.Request.Path.Value.StartsWith("/api");
  4. }, appBuilder =>
  5. {
  6. var option = new RewriteOptions();
  7. option.AddRewrite(".*","/index.html",true);
  8. appBuilder.UseRewriter(option);
  9. appBuilder.UseStaticFiles();
  10. });



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术