2016-12-26 52 views
1

我們在我們的AccountController.Login操作上使用了[ResponseCache(NoStore = true)]NoStore未將Cache-Control設置爲無存儲

[HttpGet] 
[ResponseCache(NoStore = true)] 
[AllowAnonymous] 
public IActionResult Login(string returnUrl = null) 
{ 
    ViewData["ReturnUrl"] = returnUrl; 
    return View(); 
} 

根據文檔:

NoStore覆蓋大部分的其他屬性。當此屬性設置爲true時,Cache-Control標題將設置爲"no-store"

在新的私人Firefox窗口中,當我們導航到~/Account/Login時,我們收到以下響應標頭。

Cache-Control:"no-cache" 
Content-Type:"text/html; charset=utf-8" 
Date:"Mon, 26 Dec 2016 21:50:27 GMT" 
Pragma:"no-cache" 
Server:"Kestrel" 
Transfer-Encoding:"chunked" 

我們使用ASP.NET Core 1.1.0。我們如何將Cache-Control標題設置爲no-store

回答

4

問題在於ASP.NET Core防僞nukes all user set headers and adds its own。爲了克服這一點,我們添加了我們自己的IHtmlGenerator

// Startup.cs 
services.AddSingleton< 
    Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator, 
    OurHacks.HtmlGeneratorHack>(); 

// HtmlGeneratorHack.cs (subsclasses DefaultHtmlGenerator) 
public override IHtmlContent GenerateAntiforgery(ViewContext viewContext) 
{ 
    var result = base.GenerateAntiforgery(viewContext); 

    viewContext 
     .HttpContext 
     .Response 
     .Headers[HeaderNames.CacheControl] 
      = "no-cache, max-age=0, must-revalidate, no-store"; 

    return result; 
} 
0

任何實現窗體標籤助手(即asp-action,asp-controller)的頁面都會清除緩存控件設置。我只是補充一點,因爲從上面的答案可能不清楚。

這令人難以置信的沮喪,我希望這個答案可以幫助某人。

+0

這會更好,而不是回答。 –

相關問題