asp net core 中的静态文件缓存
Static file caching in asp net core
我正在尝试启用静态文件缓存,但似乎没有效果,至少在浏览器中我找不到名称为 cache-control
的响应 header
这是我的代码
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));
}
});
在本地环境中构建和 运行 我的应用程序后,我得到了以下响应 headers
如您所见,这里没有缓存控件 header,我做错了什么?
StaticFileMiddleware
是 terminal middleware, i.e. it short-circuits the request and never calls the next middleware in chain if it comes across a static file request that doesn't match an endpoint (among other conditions).
这意味着如果你多次调用 app.UseStaticFiles()
,它会在中间件链中插入 StaticFileMiddleware
不止一次,只有链中的第一个会处理请求,其余的会保持休眠。
在控制器操作中放置一个断点并检查调用堆栈,看看堆栈中是否有多个 StaticFileMiddleware
。如果这样做,请删除未使用的那些,或者将您在此处的配置移至第一个。
在你的代码中,你似乎有 app.UseSpaStaticFiles
, which calls app.UseStaticFiles
,所以它在你自己的 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");
}
});
我正在尝试启用静态文件缓存,但似乎没有效果,至少在浏览器中我找不到名称为 cache-control
的响应 header这是我的代码
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));
}
});
在本地环境中构建和 运行 我的应用程序后,我得到了以下响应 headers
如您所见,这里没有缓存控件 header,我做错了什么?
StaticFileMiddleware
是 terminal middleware, i.e. it short-circuits the request and never calls the next middleware in chain if it comes across a static file request that doesn't match an endpoint (among other conditions).
这意味着如果你多次调用 app.UseStaticFiles()
,它会在中间件链中插入 StaticFileMiddleware
不止一次,只有链中的第一个会处理请求,其余的会保持休眠。
在控制器操作中放置一个断点并检查调用堆栈,看看堆栈中是否有多个 StaticFileMiddleware
。如果这样做,请删除未使用的那些,或者将您在此处的配置移至第一个。
在你的代码中,你似乎有 app.UseSpaStaticFiles
, which calls app.UseStaticFiles
,所以它在你自己的 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");
}
});