我有一个包含大约 20 个控制器的 MVC 应用程序。
在这个应用程序中,我想将某些视图(主要是部分视图)缓存 60 秒,即结果每分钟只会更改一次,即使基础数据在那一分钟内发生了变化。
看起来很简单。
复杂之处在于,部分显示取决于当前登录用户的不同数据。如何确保缓存是每个使用 MVC3 的用户的?
我有一个包含大约 20 个控制器的 MVC 应用程序。
在这个应用程序中,我想将某些视图(主要是部分视图)缓存 60 秒,即结果每分钟只会更改一次,即使基础数据在那一分钟内发生了变化。
看起来很简单。
复杂之处在于,部分显示取决于当前登录用户的不同数据。如何确保缓存是每个使用 MVC3 的用户的?
您可以使用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);
}