Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET核心应用程序中从wwwroot提供SPA服务时,如何控制浏览器缓存过期_C#_Angular_Asp.net Core_.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 在ASP.NET核心应用程序中从wwwroot提供SPA服务时,如何控制浏览器缓存过期

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()

我们从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();
            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");
                }
            });

对我来说,这似乎只是完全禁用缓存。我不明白这是怎么回答这个问题的?