我有一个asp.net mvc 3项目,其中包含一个主页控制器。 我已经使用以下属性标记了我的Index动作:
[OutputCache(Location = System.Web.UI.OutputCacheLocation.Any, Duration = 120, VaryByParam = "*", VaryByCustom = "user")]
public ActionResult Index()
{
return View();
}
在 Global.asax.cs 中处理了用户自定义的 vary 字段,检查用户 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 - Accept-Encoding 值看起来不对,应该发送 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);
}
花了几个小时在这上面玩耍,完全卡住了,希望有人有想法...