2

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

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

看起来很简单。

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

4

1 回答 1

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); 
}
于 2012-11-16T12:53:57.983 回答