我有一个大约20个控制器的MVC应用程序。
在这个应用程序中,我希望将某些视图(主要是部分视图)缓存60秒,即结果只会每分钟更改一次,即使基础数据在该分钟内发生了变化。
看起来很简单。
复杂的是,部分显示依赖于当前登录用户的不同数据。如何确保缓存是使用MVC3的每个用户?
答案 0 :(得分:3)
您可以使用OutputCacheAttribute
影响控制器上的输出缓存或逐个操作,并使用VaryByCustom
。
[OutputCache(Duration = 60, VaryByParam = "*", VaryByCustom="userName")]
将它放在控制器上,然后进入Global.asax.cs并覆盖GetVaryByCustomString
:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if(arg.ToLower() == “username” && context.User.Identity.IsAuthenticated) return context.User.Identity.Name;
return base.GetVaryByCustomString(context, arg);
}