为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开满天机 2019-12-27 09:33:52
我为我打开和关闭NHibernate会话的所有控制器动作设置了全局过滤器。这些操作中有95%需要某些数据库访问权限,但5%则不需要。是否有任何简单的方法可以针对这5%禁用此全局过滤器。我可以反过来,只装饰需要数据库的操作,但这将需要更多工作。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您可以编写一个标记属性:


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

    }

}

然后,如果要从全局过滤器中排除某些操作,只需用marker属性装饰它即可:


[SkipMyGlobalActionFilter]

public ActionResult Index()

{

    return View();

}


查看完整回答
反对 回复 2019-12-27
?
MMTTMM

TA贡献1869条经验 获得超4个赞

虽然,达林·迪米特洛夫(Darin Dimitrov)接受的答案很好,而且效果很好,但是对我来说,这里建立的最简单,最有效的答案。


您只需要在逻辑开始之前向属性添加一个布尔属性并对其进行检查:


public class DataAccessAttribute: ActionFilterAttribute

{

    public bool Disable { get; set; }


    public override void OnActionExecuting(ActionExecutingContext filterContext)

    {

        if (Disable) return;


        // Your original logic for your 95% actions goes here.

    }

}

然后按照5%的操作使用,如下所示:


[DataAccessAttribute(Disable=true)]

public ActionResult Index()

{            

    return View();

}


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 450 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信