Вы можете попробовать это:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if ("User".Equals(custom, StringComparison.OrdinalIgnoreCase))
{
if (!string.IsNullOrWhiteSpace(Thread.CurrentPrincipal.Identity.Name))
return Guid.NewGuid().ToString(); // do not cache anything
return string.Empty; // cache for non-signed-in users
}
return base.GetVaryByCustomString(context, custom);
}
Ответ на комментарий
GUID является уникальным глобальным идентификатором.Каждый раз, когда вы вызываете Guid.NewGuid().ToString()
, вы получаете чертовски уникальную строку. Технически результат все еще будет кэшироваться , однако он будет кэшироваться с использованием уникальной строки.Таким образом, вероятность того, что 2 подписанных пользователя когда-либо увидят один и тот же кэшированный результат, крайне мала.На самом деле, вероятность того, что один и тот же вошедший в систему пользователь когда-либо увидит кэшированный результат для страницы, невелика.
Другой подход, если вы вообще не хотите ничего кэшировать, состоит в том, чтобы реализовать кэширование вручную.,Тем не менее, я не думаю, что вы можете сказать методу действия «кэшировать для не подписанных пользователей, но не кэшировать для зарегистрированных пользователей», используя OutputCacheAttribute
.