如何有选择地禁用ASP.Net MVC中的全局过滤器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (269)

我为所有控制器操作设置了一个全局过滤器,用于打开和关闭NHibernate会话。95%的这些行为需要一些数据库访问,但是5%不需要。有没有简单的方法来禁用这5%的全局过滤器。我可以反过来只装饰需要数据库的动作,但这将会更加有效。

提问于
用户回答回答于

可以编写标记属性:

public class SkipMyGlobalActionFilterAttribute : Attribute
{
}

然后在全局操作筛选器测试中是否存在此标记:

public class MyGlobalActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipMyGlobalActionFilterAttribute), false).Any())
        {
            return;
        }

        // here do whatever you were intending to do
    }
}

然后,如果要从全局过滤器中排除某些操作,只需使用标记属性来修饰它:

[SkipMyGlobalActionFilter]
public ActionResult Index()
{
    return View();
}
用户回答回答于

你也可以做这个真棒帖子中描述的内容:

排除过滤器

只需实现一个自定义ExcludeFilterAttribute然后自定义ExcludeFilterProvider

扫码关注云+社区

领取腾讯云代金券