本文章主要说明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 == ){
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关联使用
  • 扩展名以 "." 开头。
  • 运行结果如下:

最新文章

  1. 让“是男人就下到100层”在Android平台上跑起来
  2. AX7: CREATE AN AUTOMATED TEST PACKAGE\MODEL
  3. reset
  4. JavaScript判断是否是手机mobile登录
  5. gcc常用指令及相关知识
  6. Educational Codeforces Round 15 Powers of Two
  7. 【解决】UEFI+GPT模式下装系统(WIN7/WIN8)
  8. Getting Started with Testing ——开始单元测试
  9. c#geckofx文件流下载
  10. 自学PHP 环境搭建
  11. python的web开发环境Django配置
  12. BZOJ_2435_[Noi2011]道路修建_dfs
  13. 经验分享:PDF怎么提取页面
  14. docker compose 服务启动顺序控制
  15. Codeforces 628F 最大流转最小割
  16. npm那些事儿
  17. Git冲突和解决冲突-测试方法
  18. DotNetBar TextBoxDropDown响应按键事件
  19. Mybatis Dynamic Query 更新
  20. 京东轮播图片的静态页面CSS3

热门文章

  1. objective-c中线程编程一例
  2. 创建Sencha touch第一个应用
  3. c程序的编译
  4. 2018 .NET开发者调查报告: .NET Core 是怎么样的状态
  5. poi excel 常用操作
  6. 简单了解JS中的几种遍历
  7. 我对IoC/DI的理解
  8. 简单工厂,Factory Method(工厂方法)和Abstract Factory(抽象工厂)模式
  9. python单线程,多线程和协程速度对比
  10. FFPLAY的原理(一)