根据登录用户缓存部分内容

时间:2012-11-16 12:48:15

标签: c# asp.net-mvc asp.net-mvc-3 caching

我有一个大约20个控制器的MVC应用程序。

在这个应用程序中,我希望将某些视图(主要是部分视图)缓存60秒,即结果只会每分钟更改一次,即使基础数据在该分钟内发生了变化。

看起来很简单。

复杂的是,部分显示依赖于当前登录用户的不同数据。如何确保缓存是使用MVC3的每个用户?

1 个答案:

答案 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); 
}