У меня есть проект 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 обрабатывается изменение по индивидуальному заказу с пользователем для проверки значения файла cookie пользователя, чтобы кеширование изменялось в зависимости от того, вошел ли пользователь в систему или нет и что это пользователи.
Когда я перехожу на эту страницу на своем веб-сервере, я получаю следующие заголовки в ответе:
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);
}
Играл с этим несколько часов и полностью застрял, надеюсь, у кого-то есть идея ...