响应缓存在ASP.NET Core项目中不起作用

时间:2018-12-27 07:42:11

标签: asp.net-mvc caching asp.net-core

我尝试在asp.net核心项目中实现响应缓存,但是它不起作用。这是startup.cs

             public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCaching();
        services.AddMvc();
    }




      public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
         app.UseResponseCaching();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

这是我的控制器。

    [ResponseCache(Duration = 30)]
public IActionResult Index()
    {
        ViewBag.IsMobile = RequestExtensions.IsMobileBrowser(ContextAccessor.HttpContext.Request);

        return View();
    }

但仍然缓存控件标头ID

              cache-control →no-cache, no-store

我缺少的地方请帮忙。此响应缓存不起作用,我接受了Microsoft文档的指导

3 个答案:

答案 0 :(得分:0)

我尝试了this Microsoft document并成功缓存了。

Cache-Control: public,max-age=30
Date: Thu, 27 Dec 2018 07:50:16 GMT

我认为您缺少app.Use(async => )部分。

答案 1 :(得分:0)

要在dotnet core中设置响应缓存,请按照以下步骤操作:

  1. 在Startup.cs中找到ConfigureServices方法并添加以下行:

    services.AddResponseCaching();

  2. Ins Startup.cs找到Configure方法并添加以下行:

        app.UseResponseCaching();
    
        app.Use(async (context, next) =>
        {
            context.Response.GetTypedHeaders().CacheControl =
                new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
                {
                    Public = true,
                    MaxAge = TimeSpan.FromSeconds(10)
                };
            context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
                new string[] { "Accept-Encoding" };
    
            await next();
        });
    
  3. [ResponseCache]属性应用于需要缓存的操作:

    [ResponseCache(Duration = 300, VaryByQueryKeys = new string[] { "id" })]
    [HttpGet]
    public async Task<IActionResult> Index(int id)
    {
        return View();
    }
    

答案 2 :(得分:0)

请注意,要使缓存正常工作,必须满足许多要求:

  

该请求必须引起服务器200(OK)响应。

     

请求方法必须为GET或HEAD。

     

终端中间件(例如静态文件中间件)不得处理   在响应缓存中间件之前进行响应。

     

不得显示Authorization标头。

     

Cache-Control标头参数必须有效,并且响应必须   标记为公开,而不标记为私有。

     

Pragma:没有缓存的标头/值必须不存在   Cache-Control标头不存在,因为Cache-Control标头   覆盖Pragma标头(如果存在)。 Set-Cookie标头必须   不存在。

     

各种标头参数必须有效且不等于*。

     

Content-Length标头值(如果已设置)必须与   响应主体。

     

...

访问此网站:aspnet-core-response-cache

还要注意,如果邮递员发出请求,请禁用“不发送缓存头”选项。

请参阅此帖子(结束帖子的图片):ASP.Net Core 2.0 - ResponseCaching Middleware - Not Caching on Server