如何解决asp net core中的静态文件缓存
我正在尝试启用静态文件缓存,但似乎没有效果,至少在浏览器中我找不到名称为 cache-control 的响应头
这是我的代码
app.UseSpaStaticFiles(new StaticFileOptions
{
RequestPath = _settings.SpaRoute,});
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
// Cache static files for 30 days
ctx.Context.Response.Headers.Append("Cache-Control","public,max-age=2592000");
ctx.Context.Response.Headers.Append("Expires",DateTime.UtcNow.AddDays(30).ToString("R",CultureInfo.InvariantCulture));
}
});
在本地环境中构建并运行我的应用程序后,我得到了以下响应头
你可以看到这里没有缓存控制头,我做错了什么?
解决方法
StaticFileMiddleware
是一个 terminal middleware,即如果它遇到与端点不匹配的静态文件请求({{3 }}).
这意味着如果您多次调用 app.UseStaticFiles()
,它将在中间件链中多次插入 StaticFileMiddleware
,只有链中的第一个会处理请求,其余的将保持休眠状态.
在控制器操作中放置一个断点并检查调用堆栈并查看堆栈中是否有多个 StaticFileMiddleware
。如果这样做,请删除未使用的配置,或将此处的配置移至第一个配置。
在您的代码中,您似乎有 among other conditions,因此它在您自己的 app.UseStaticFiles(/*custom options*/)
之前生效。
要解决问题,只需将 OnPrepareResponse
传递到该中间件:
app.UseSpaStaticFiles(new StaticFileOptions {
RequestPath = _settings.SpaRoute,OnPrepareResponse = ctx =>
{
// Cache static files for 30 days
ctx.Context.Response.Headers.Append("Cache-Control","public,max-age=2592000");
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。