我有一個asp.net mvc 3項目,我有一個家庭控制器。我已標記的我與這個屬性索引操作:ASP.NET MVC OutputCache因*而有所不同,並因用戶cookie而異
[OutputCache(Location = System.Web.UI.OutputCacheLocation.Any, Duration = 120, VaryByParam = "*", VaryByCustom = "user")]
public ActionResult Index()
{
return View();
}
將通過用戶在Global.asax.cs中被處理,以檢查用戶的cookie值自定義不同,所以根據該緩存是否改變用戶登錄或不是和他們是什麼用戶。
當我去這個頁面我的Web服務器上,我的迴應得到這些標題:
Cache-Control public, max-age=120
Content-Type text/html; charset=utf-8
Content-Encoding gzip
Expires Sun, 20 Mar 2011 21:50:09 GMT
Last-Modified Sun, 20 Mar 2011 21:48:09 GMT
Vary Accept-Encoding
Date Sun, 20 Mar 2011 21:48:09 GMT
Content-Length 3105
馬上蝙蝠,在不同 - 接受編碼值看起來錯了,不應該有它發送Vary - *代替?
我正在將User.Identity.Name屬性渲染到此視圖,並且我注意到即使在註銷它時它仍將呈現用戶名,直到120秒過期。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("user", StringComparison.OrdinalIgnoreCase))
{
HttpCookie cookie = context.Request.Cookies["user"];
if (cookie != null)
{
return cookie.Value;
}
}
return base.GetVaryByCustomString(context, custom);
}
一直玩這個了幾個小時,我完全被卡住,希望有人有一個想法......
超級這是很好的知道 – jjxtra 2011-07-25 15:52:22
非常好的提示。我不知道它爲什麼在IIS7.0中默認爲false,這導致我們產生了一個bug的輸出緩存 – 2011-11-13 00:26:18