环境:
- window 10
- vs2019
- .net core 3.1
场景需求:
在使用asp.net core
开发的web服务器中,我们直接使用app.UseStaticFiles()
中间件托管wwwroot目录下的资源,那么我们可不可以托管其他目录的文件呢?可不可以托管多个不同目录的文件呢?
答案是可以的。
效果实现:
首先,新建一个asp.net core webapi项目;
在工程下新建wwwroot目录,里面有一个login.html;
准备一个其他目录,如: c:\test
,里面有一个文件 log.txt
;
startup.cs
的Configure
如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider("c:/test"),
RequestPath = "/croot"
});
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
运行后,查看效果:
浏览器输入: http://localhost:5000/login.html
:
浏览器输入: http://localhost:5000/croot/log.txt
:
备注:
其他应用场景:
需要加入自定义映射、指定默认文件等,参照如下:
#region 设置静态web资源
//使用默认文件(要放在UseStaticFiles之前)
app.UseDefaultFiles();
var staticfile = new StaticFileOptions();
//设置当文件的后缀名不在已知的范围内的时候返回404
staticfile.ServeUnknownFileTypes = true;
//对于未找到对应mime的使用下面设置的默认mime值(要求ServeUnknownFileTypes=true)
staticfile.DefaultContentType = "application/x-msdownload";
// 手动设置对应的 MIME TYPE
var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".log", "text/plain");
provider.Mappings.Add(".dwg", "application/x-dwg");
staticfile.ContentTypeProvider = provider;
app.UseStaticFiles(staticfile);
//开发环境下启用目录浏览
if (env.IsDevelopment())
{
//要放在UseDefaultFiles之后
app.UseDirectoryBrowser();
}
#endregion