MVC 3 GlobalFilters排除

B Z*_*B Z 8 asp.net-mvc asp.net-mvc-3

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

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
     filters.Add(new MySweetAttribute()).Exclude(OneController);
 }
Run Code Online (Sandbox Code Playgroud)

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

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

ele*_*u81 31

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

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

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

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

[MySweetAttribute(Disable=true)]
public ActionResult Index()
{            
    return View();
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助

  • 这是一个非常好的答案 - 感谢您的贡献! (4认同)
  • 惊人的快速解决方案!:d (2认同)

Joe*_*ano 2

我认为您需要实现一个过滤器提供程序来执行此操作,然后当您实现 GetFilters 时,不要将过滤器应用于您希望排除的操作。这是一个例子:

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