我有一个想要应用于除一个以外的所有控制器的过滤器。所以我想写一些看起来像这样的东西:
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
答案 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时不要对要排除的操作应用过滤器。这是一个例子:
答案 2 :(得分:2)
实现IFilterProvider并不复杂。请参阅使用提供者工具的完整示例,以按类型排除过滤器:http://blogs.microsoft.co.il/blogs/oric/archive/2011/10/28/exclude-a-filter.aspx
答案 3 :(得分:1)
您无法从全局过滤器中排除。如果要排除控制器,请使用标准过滤器。