2016-05-06 71 views

回答

0

後,我問這個問題,採用中間件突然來到我的腦海裏,我已經實現了類象下面這樣:

public class OutputCacheHeaderMiddleware 
    { 
     private readonly RequestDelegate _next; 

     public OutputCacheHeaderMiddleware(RequestDelegate next) 
     { 
      _next = next; 
     } 

     public async Task Invoke(HttpContext context) 
     { 
      var user = UserHelper.GetUser(context); 

      if (user?.UserInfos != null) 
      { 
       var key = "user_1_a_" + string.Join(",", user.UserInfos.Select(u => u.Id)); 
       context.Request.Headers.Add("dt-cache-user", key); 
      } 


      await _next.Invoke(context); 

     } 
    } 

然後,對於它的擴展方法:

public static class OutputCacheHeaderExtensions 
    { 
     public static IApplicationBuilder UseOutputCacheHeader(this IApplicationBuilder builder) 
     { 
      return builder.UseMiddleware<OutputCacheHeaderMiddleware>(); 
     } 
    } 

和Startup.cs配置方法,我添加app.UseOutputCacheHeader();

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
     { 

      app.UseOutputCacheHeader(); 

      app.UseIISPlatformHandler(); 
      app.UseStaticFiles(); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        name: "default", 
        template: "{controller=Home}/{action=Index}/{id?}"); 
      }); 
     } 

和控制器:

[ResponseCache(VaryByHeader = "dt-cache-user", Duration = 6000)] 
public IActionResult Index() 
{ 
    return View(); 
} 

這一切後,當我調試它,我可以看到,有一個標題「DT-緩存用戶」用正確的值,但ResponseCache中不加工。每次我點擊F5刷新頁面時,總是碰到調試點。

它可能不起作用的原因是什麼?

謝謝。

+0

響應緩存緩存取決於瀏覽器。例如,如果您手動刷新頁面,或者開發工具設置爲禁用緩存,Google Chrome會始終發送請求。嘗試點擊一次指向索引頁的鏈接。 –

+0

我特別控制了「禁用Cahce」複選框,並且未選中。刷新和導航操作都不起作用。 –