使用静态文件
UseStaticFiles,使~/指向wwwroot文件夹。
添加wwwroot外部静态文件夹则需要使用以下方法
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = "/StaticFiles"
});
}
使用:<img src="~/StaticFiles/images/banner1.svg" alt="ASP.NET" class="img-responsive" />
StaticFileOptions还可以用来设置http响应标头
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var cachePeriod = env.IsDevelopment() ? "600" : "604800";
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
// Requires the following import:
// using Microsoft.AspNetCore.Http;
ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age={cachePeriod}");
}
});
}
静态文件授权
该文件要放在公开目录之外。
[Authorize]
public IActionResult BannerImage()
{
var file = Path.Combine(Directory.GetCurrentDirectory(),
"MyStaticFiles", "images", "banner1.svg");
return PhysicalFile(file, "image/svg+xml");
}
启用目录浏览
public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser(); //添加所需服务
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images")),
RequestPath = "/MyImages"
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images")),
RequestPath = "/MyImages"
});
}
注意:
在UseStaticFiles之后,注意区别大小写。
放在wwwroot之外,以免不慎泄露代码
删除IIS网站的浏览模块:
- 转到“模块”功能 。
- 在列表中选择 StaticFileModule 。
- 单击“操作”侧栏中的“删除” 。
使用默认文档
public void Configure(IApplicationBuilder app)
{
app.UseDefaultFiles(); //default.htm、default.html、index.htm、index.html
app.UseStaticFiles();
}
public void Configure(IApplicationBuilder app)
{
// 修改默认文件
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("mydefault.html");
app.UseDefaultFiles(options);
app.UseStaticFiles();
}