2017-05-02 42 views
1

我有以下的过滤器注册是否有可能忽略MVC一个单一的筛选器属性上

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
      filters.Add(new CompressContentAttribute()); 
      filters.Add(new MinifyHtmlAttribute()); 

      filters.Add(new MinifyXmlAttribute()); 
     } 

我想在一个特定的动作 忽略CompressContentAttribute()具体的操作方法是有可能在MVC这样做。 我做了各种研究,他们每个人都显示如何忽略整个过滤器属性

回答

0

您需要创建一个自定义过滤器提供程序。这个IFilterProvider接口有一个方法GetFilters。

public class SelectiveFilterProvider : IFilterProvider 
{ 
    private readonly List<Func<ControllerContext, object>> filterconditions = new List<Func<ControllerContext, object>>(); 
    public void Add(Func<ControllerContext, object> mycondition) 
    { 
     filterconditions.Add(mycondition); 
    } 

    public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) 
    { 
     return from filtercondition in filterconditions 
       select filtercondition(controllerContext) into ctrlContext 
       where ctrlContext!= null 
       select new Filter(ctrlContext, FilterScope.Global); 
    } 
} 

在Global.asax.cs中

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     MyFilterProvider provider = new MyFilterProvider(); 
     provider.Add(d => d.RouteData.Values["action"].ToString() != "SkipFilterAction1 " ? new CompressContentAttribute() : null); 
     FilterProviders.Providers.Add(provider); 

     filters.Add(new HandleErrorAttribute()); 
     filters.Add(new MinifyHtmlAttribute()); 
     filters.Add(new MinifyXmlAttribute()); 
    } 
相关问题