2013-02-11 55 views
1

我有一个MVC的网站使用AD身份验证,以显示2011年用户的CRM的权利,均由其在CRM角色确定也是用户CRM数据,因此目前OnActionExecuting方法获取执行用户的域名,查询CRM的角色。如果他们没有有效的角色,则会返回无效的权限视图。是否可以缓存我的自定义ActionFilterAttribute的结果?

到CRM的呼叫是缓慢的,并能得到昂贵的,如果它发生的每一个请求。我可以在MVC 3 release notes看到这些过滤器被积极地缓存,但不太清楚这对我意味着什么。

我希望能够根据自己的域名缓存用户的权利,但它听起来像是可能已经发生?

回答

2

如果你是referring to following statement,我想你已经明白了这一点错误:

在ASP.NET MVC 3,过滤器更积极缓存。因此, 任何不正确地存储实例状态的自定义操作筛选器可能会被破坏。

这并不意味着,过滤器的结果被缓存。这意味着过滤器本身将被缓存,并将被重复用于多个请求。它与CRM插件相媲美。你不应该跟踪它的状态,或者如果你这样做,你必须小心,不要输入并发的乐趣。

在你的情况我会使用,例如MemoryCache缓存用户的角色/特权内存一段时间。

+0

所以单个ActionFilterAttribute对象可以被创建并通过由不同用户的多个请求使用? – Daryl 2013-02-12 13:14:25

+0

@Daryl是的,正好。 – ccellar 2013-02-12 13:22:48

+0

我想在处理webfarms时,使用MemoryCache不会对任何用户特定的数据有好处。您可以创建6个不同的请求,并打6个不同的服务器,所有6个都需要填充缓存。真的,我需要使用会话,因为它们将在服务器场中的所有服务器之间共享(假设它是以这种方式配置的)。 – Daryl 2013-02-13 15:19:19

相关问题