MVC 3 GlobalFilters排除

时间:2011-02-21 20:13:37

标签: asp.net-mvc asp.net-mvc-3

我有一个想要应用于除一个以外的所有控制器的过滤器。所以我想写一些看起来像这样的东西:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
     filters.Add(new MySweetAttribute()).Exclude(OneController);
 }

试图通读布拉德关于这个主题的帖子对我来说是胡言乱语

http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html

我假设它是可能的,因为下面的库似乎这样做,但我想避免在可能的情况下添加依赖项。

http://www.codeproject.com/KB/aspnet/FluentFltrsASPNETMVC3.aspx

希望有人已经这样做了,很容易做到......

感谢您的帮助。

更新

Phil Haack刚刚发布了如何处理这种情况。

http://haacked.com/archive/2011/04/25/conditional-filters.aspx

4 个答案:

答案 0 :(得分:31)

我一直在网上搜索同样的问题而没有运气,所以我自己尝试了这个并且它有效:

public class MySweetAttribute: ActionFilterAttribute
{
    public bool Disable { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (Disable) return;

        ...
    }
}

然后,当您想要禁用全局过滤器时,只需将该属性添加到该行为,并将disable propierty设置为true:

[MySweetAttribute(Disable=true)]
public ActionResult Index()
{            
    return View();
}

希望这个帮助

答案 1 :(得分:2)

我认为你需要实现一个过滤器提供程序才能执行此操作,然后在实现GetFilters时不要对要排除的操作应用过滤器。这是一个例子:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=578

答案 2 :(得分:2)

实现IFilterProvider并不复杂。请参阅使用提供者工具的完整示例,以按类型排除过滤器:http://blogs.microsoft.co.il/blogs/oric/archive/2011/10/28/exclude-a-filter.aspx

答案 3 :(得分:1)

您无法从全局过滤器中排除。如果要排除控制器,请使用标准过滤器。