Asp.net mvc 4 是否可以缓存自定义ActionFilterAttribute的结果?

Asp.net mvc 4 是否可以缓存自定义ActionFilterAttribute的结果?,asp.net-mvc-4,dynamics-crm-2011,Asp.net Mvc 4,Dynamics Crm 2011,我有一个MVC网站,它使用广告认证为同样是CRM 2011的用户显示数据。用户的CRM权限由其在CRM中的角色决定,因此当前,OnActionExecuting方法获取执行用户的域名,并向CRM查询其角色。如果他们没有有效的角色,则返回无效的权限视图 对CRM的调用很慢,如果必须对每个请求进行调用,则可能会很昂贵。我可以从中看到过滤器被积极缓存,但我不太确定这对我意味着什么 我希望能够根据用户的域名缓存用户的权限,但听起来这可能已经发生了 如果你是,我想你对这一点的理解是错误的: 在ASP.NE

我有一个MVC网站,它使用广告认证为同样是CRM 2011的用户显示数据。用户的CRM权限由其在CRM中的角色决定,因此当前,
OnActionExecuting
方法获取执行用户的域名,并向CRM查询其角色。如果他们没有有效的角色,则返回无效的权限视图

对CRM的调用很慢,如果必须对每个请求进行调用,则可能会很昂贵。我可以从中看到过滤器被积极缓存,但我不太确定这对我意味着什么

我希望能够根据用户的域名缓存用户的权限,但听起来这可能已经发生了

如果你是,我想你对这一点的理解是错误的:

在ASP.NET MVC 3中,过滤器被更积极地缓存。所以,, 任何不正确存储实例状态的自定义操作筛选器都可能 被打破了

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


例如,在您的情况下,我会将用户的角色/权限缓存在内存中一段时间。

因此,单个ActionFilterAttribute对象可能会被不同用户的多个请求创建和使用?我认为在处理webfarms时,使用MemoryCache对任何特定于用户的数据都没有好处。您可以发出6个不同的请求并访问6个不同的服务器,所有6个都必须填充缓存。实际上,我需要使用会话,因为它们将在服务器场上的所有服务器之间共享(假设是这样配置的)。@Daryl这就是我编写示例的原因。如果您有分布式服务器,则必须使用分布式缓存,如Redis、memcached等。我不一定把这些信息放在会议上