您的位置:首页 > 编程语言 > ASP

这样入门asp.net core 之 静态文件

2018-03-25 15:55 776 查看

本文章主要说明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关联使用
  • 扩展名以 "." 开头。
  • 运行结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: