在Core 9.0
版本中新增的内容不算多,除了内置OpenAPI 外 应该就属MapStaticAssets
中间件最有价值了,最初MapStaticAssets主要是为了解决Blazor
静态资源加载缓慢而生的,当然只要是wwwroot
下的任何静态资产都是可以使用TA平替UseStaticFiles
的,因此在了解了TA的优势后 建议升级到9.0的小伙伴都使用TA平替UseStaticFiles!
通常,在我们既有的NETCore项目中,我们都是使用UseStaticFiles
中间件来提供静态资产,不过TA存在以下的一些缺陷:
MapStaticAssets
旨在解决上述UseStaticFiles存在的一些缺陷:
gzip
,在发布期间 gzip + brotli
SHA-256
哈希的 Base64 编码字符串。这可确保浏览器仅在文件内容发生更改时重新下载文件。在MapStaticAssets
内部的请求管道中TA做了下面这些事:
下表显示了默认的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和压缩大小:
文件 | 原始 | 压缩 | %缩减 |
---|---|---|---|
bootstrap.min.css | 163 | 17.5 | 89.26% |
jquery.js | 89.6 | 28 | 68.75% |
bootstrap.min.js | 78.5 | 20 | 74.52% |
总计 | 331.1 | 65.5 | 80.20% |
在使用Blazor
开发业务系统时将节省大量传输宽带,极大的提升加载速度
当然UseStaticFiles
仍然有TA不可替代的部分,比如虚拟文件提供者(如,嵌入的资产,其他磁盘路径资源,或网络资源等)
比如资源是嵌入到程序集的情况下你仍然必须使用:
var embeddedFileProvider = new EmbeddedFileProvider(typeof(ISetting).Assembly, "Biwen.Settings");
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = embeddedFileProvider,
OnPrepareResponse = ctx =>
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=3600");
}
});
强烈建议在可替换UseStaticFiles()
的情况下使用MapStaticAssets()