我尝试过这个中间件,但浏览器仍在保存文件.
我希望用户将始终获得js和css文件的最新版本.
public void Configure(IApplicationBuilder app)
{
app.UseSession();
app.UseDefaultFiles();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
context.Context.Response.Headers.Add("Cache-Control", "no-cache")
});
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个在 ASP.NET Core 5.0 上运行的基于 React 的 SPA,但最近在将重大更改推送到生产环境后遇到了问题 - 用户在尝试访问该网站时经常会看到错误,因为他们的浏览器正在加载过时的内容与对后端所做的更改不兼容的 SPA 版本。
深入研究这一点,问题似乎是index.html
缓存的时间超过了应有的时间,并且根据我在这些帖子中读到的内容,我应该将其配置为永远不会被缓存:
我在这里的帖子中遇到了一个与我有类似问题的人,并遵循这个解决方案。经过更多挖掘后,我还在这个 Github 线程中发现了该解决方案的更全面版本,并且我当前的尝试基于此。
我发现这篇文章与我的类似:StaticFileOptions.OnPrepareResponse does not get call for index.html。不同之处在于,他们的回调除了他们感兴趣的路径之外的所有内容都被命中,而我的回调根本没有被命中。
在我的应用程序中,我将Startup.Configure
方法更改为:
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseSpaStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
if (ctx.Context.Request.Path.StartsWithSegments("/static"))
{
// Cache all static resources for 1 year (versioned filenames)
var headers = ctx.Context.Response.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue …
Run Code Online (Sandbox Code Playgroud)