静态文件,包括HTML文件,CSS文件,图像文件和JavaScript文件,它是一个应用里所包含的资源。css
1. 提供静态文件html
默认的,静态文件存储在你的webroot目录下面,webroot的路径定义在project.json里面web
"webroot": "wwwroot"json
静态文件能够被存储在webroot下面的任何目录当中,以一个相对目录获取到。在一个默认的web应用程序当中,在webroot下面默认有三个目录css, images和js. 要获取图像路径,格式以下:浏览器
http://<yourApp>/images/<imageFileName>app
为了应用静态文件,你必须在Configure方法中注册ide
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)ui
{spa
app.UseStaticFiles();htm
}
若是你有不在webroot目录下的静态文件须要添加,如何作呢
假如文件目录以下:
* wwwroot
*css
*images
*....
*MyStaticFiles
* test.png
要获取test.png,如何作呢,咱们须要在Configure添加以下的代码:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(@"D:\Source\WebApplication1\src\WebApplciation1\MyStaticFiles"),
RequestPath = new PathString("/StaticFiles")
});
这样,用户就能够经过http://<yourApp>/StaticFiles/test.png来获取test.png文件了.
2. 使目录可预览
上当浏览可使用户浏览你的目录和子目录信息,默认的这个功能是关闭的,要使其打开,能够在COnfigure里增长以下代码:
app.UseDirectoryBrowser();
一样的,webroot目录之外的静态资源要被浏览,作以下配置:
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(@"..."),
RequestPath = new PathString("/StaticFiles")
});
你能够经过http://<yourApp>/StaticFiles去浏览.
3. 提供默认的文件
为了避免输入全路径而要显示默认的文件,能够经过UseDefaultFiles扩展方法来扩展。注意,你还必须调用UseStaticFIles,这是由于UseDefaultFile是URL重写,他实际上不提供文件。
app.UseDefaultFiles();
app.UseStaticFiles();
若是你用了UseDefaultFiles, 中间件会找以下的页面做为默认页面。
*default.htm
*default.html
*index.htm
*index.html
要定义本身的默认文件,代码以下:
DefaultFileOptions options = new DefaultFileOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("mydefault.html");
app.UseDefaultFiles(options);
app.UseStaticFiles();
若是你想用一个默认的页面在webroot以外,你也必须再调用一下UseStaticFiles, UseDefaultFiles方法传参数进去。这样比较麻烦,能够用UseFileServer代替
4. UseFileServer方法
UseFileServer方法能够合并UseStaticFiles, UseDefaultFiles和UseDirectoryBrowser方法。
app.UseFileServer(); 或者 app.UseFileServer(enableDirectoryBrowsing: true);
你要在webroot以处定义你的静态文件,代码以下:
app.UserFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(@"D:\Source\WebApplication1\src\WebApplication1\MyStaticFiles"),
RequestPath = new PathString("/StaticFiles"),
EnableDirectoryBrowsing = true
});
5. Content types
ASP.NET提供了差很少400多个文件类型,若是你试图访问一个未知的文件类型,ASP.NET中间件不会提供这个文件。
例若有一个文件路径
* wwwroot
* images
*test.image
若是你访问http://<yourApp>/images/test.image, 你会获得一个404的错误,尽管这个文件实际上存在。你能够当开这个限制,以下所示:
app.UseStaticFiles(new StaticFileOptions
{
ServerUnknownFileTypes = true,
DefaultContentType = "image/png"
});
这样,若是用户浏览一个未定义的文件格式,浏览器会以一个图片的格式在渲染它。
若是你有不少的文件类型是ASP.NET不知道,该怎么作呢?FileExtensionContentTypeProvider类能够帮助你。代码以下:
var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".myapp", "application/x-msdownload");
app.UseStaticFiles(new StaticFileOptions{ ContentTypeProvider = provider});
这样,若是用户请求.myapp的文件,浏览器会下载该文件.
6. IIS
IIS有个本地的静态文件的模块,它独立于ASP.NET的静态文件,ASP.NET模块在IIS本地模块以前运行,在ASP.NET Beta7 , IIS 宿主改变了,若是ASP.NET不处理,IIS本地模块也不处理。若是要选择执行IIS本地的模块,须要执行以下代码:
app.RunIISPipeline();
注意:代码文件应该放在webroot以外,这样能够把静态文件和动态文件区分开来。