Вот как я это реализовал.
В Global.asax.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "UserId")
{
if (context.Request.IsAuthenticated)
{
return context.User.Identity.Name;
}
return null;
}
return base.GetVaryByCustomString(context, custom);
}
Использование в атрибуте кэша вывода:
[OutputCache(Duration = 30, VaryByCustom = "UserId" ...
public ActionResult MyController()
{
...