1 namespace System.Web.Mvc {
3 using System.Collections.Generic;
5 using System.Web.Mvc.Async;
7 public class FilterAttributeFilterProvider : IFilterProvider {
8 private readonly bool _cacheAttributeInstances;
10 public FilterAttributeFilterProvider()
14 public FilterAttributeFilterProvider(bool cacheAttributeInstances) {
15 _cacheAttributeInstances = cacheAttributeInstances;
18 protected virtual IEnumerable<FilterAttribute> GetActionAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor) {
19 return actionDescriptor.GetFilterAttributes(_cacheAttributeInstances);
22 protected virtual IEnumerable<FilterAttribute> GetControllerAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor) {
23 return actionDescriptor.ControllerDescriptor.GetFilterAttributes(_cacheAttributeInstances);
26 public virtual IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) {
27 ControllerBase controller = controllerContext.Controller;
28 if (controller == null) {
29 return Enumerable.Empty<Filter>();
32 var typeFilters = GetControllerAttributes(controllerContext, actionDescriptor)
33 .Select(attr => new Filter(attr, FilterScope.Controller, null));
34 var methodFilters = GetActionAttributes(controllerContext, actionDescriptor)
35 .Select(attr => new Filter(attr, FilterScope.Action, null));
37 return typeFilters.Concat(methodFilters).ToList();