C# 在ASP.NET核心应用程序中从wwwroot提供SPA服务时,如何控制浏览器缓存过期
我们从ASP.NET Core 2.1 Web后端的wwwroot文件夹提供基于Angular的SPA的生产包。 否则,此ASP.NET核心Web后端仅充当SPA的REST API 为此,我在Startup.cs中将这一行添加到ConfigureServices方法中:C# 在ASP.NET核心应用程序中从wwwroot提供SPA服务时,如何控制浏览器缓存过期,c#,angular,asp.net-core,.net-core,asp.net-core-mvc,C#,Angular,Asp.net Core,.net Core,Asp.net Core Mvc,我们从ASP.NET Core 2.1 Web后端的wwwroot文件夹提供基于Angular的SPA的生产包。 否则,此ASP.NET核心Web后端仅充当SPA的REST API 为此,我在Startup.cs中将这一行添加到ConfigureServices方法中: services.AddSpaStaticFiles(config => config.RootPath = "wwwroot"); 这是配置方法的一部分 app.UseDefaultFiles()
services.AddSpaStaticFiles(config => config.RootPath = "wwwroot");
这是配置方法的一部分
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc();
app.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot";
});
这是可行的,但我注意到当我在wwwroot中更新包时,客户端并不总是选择新版本。通常,他们必须在浏览器中强制刷新页面以获得最新版本
好吧,这和浏览器缓存有关
在部署SPA捆绑包的新版本时,如何控制该缓存的过期,以便客户端浏览器立即获取新版本?您可以使用此代码清除缓存
app.UseSpaStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = ctx =>
{
var headers = ctx.Context.Response.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue
{
Public = true,
MaxAge = TimeSpan.FromDays(0)
};
}
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions()
{
OnPrepareResponse = ctx => {
var headers = ctx.Context.Response.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue
{
Public = true,
MaxAge = TimeSpan.FromDays(0)
};
}
};
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
对我来说,这似乎只是完全禁用缓存。我不明白这是怎么回答这个问题的?