2016-12-26 4 views
1

AccountController.Loginというアクションで使用しました。NoStoreがCache-Controlをno-storeに設定していません

[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コアの偽造防止の問題は、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

formタグヘルパー、すなわちASP-作用、ASP-コントローラを実装する任意のページ、キャッシュ制御設定をクリアします。私は上記の答えから明らかではないかもしれないので、これを追加するだけです。

これは信じられないほどイライラしています。私はこの回答が誰かを助けることを願っています。

+0

これは、回答ではなくコメントとしての方がよいでしょう。 –

関連する問題