Asp.net mvc 检查MVC5中的操作是否使用了另一个操作过滤器属性

Asp.net mvc 检查MVC5中的操作是否使用了另一个操作过滤器属性,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-3,actionfilterattribute,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 3,Actionfilterattribute,我几乎没有像这样的自定义动作过滤器 public class CustomFilter:ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //Some task } } 在我的行动方法中 [CustomFilter] [CustomFilterNew] public ActionResult Index() {

我几乎没有像这样的自定义动作过滤器

public class CustomFilter:ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
     //Some task
  }
}


在我的行动方法中

[CustomFilter]
[CustomFilterNew]
public ActionResult Index()
{
   return View();
}
让我们假设CustomFilterNew与CustomFilter正好相反


在这种情况下,如何防止一个筛选器操作执行另一个筛选器操作,让我们假设CustomFilterNew应禁止执行CustomFilter

设置
filterContext。Result
属性为任何非空值将停止执行后续筛选器。因此,如果第一个筛选器设置了
filterContext.Result=new RedirectResult(…)
,则第二个筛选器和操作方法将永远不会运行

有很多方法可以做到这一点,如下所示

  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
         filterContext.Result = new RedirectResult("~/Home/Index");
  }

这里我必须提到的另一件事是如何设置过滤器工作的
顺序
,您可以为
操作过滤器提供
顺序
,如下所示以按顺序执行过滤器

[FilterOne(Order = 1), FilterTwo(Order = 2)]

filterContext.Result
属性设置为任何非空值将停止执行后续筛选器。因此,如果第一个筛选器设置了
filterContext.Result=new RedirectResult(…)
,则第二个筛选器和操作方法将永远不会运行

有很多方法可以做到这一点,如下所示

  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
         filterContext.Result = new RedirectResult("~/Home/Index");
  }

这里我必须提到的另一件事是如何设置过滤器工作的
顺序
,您可以为
操作过滤器提供
顺序
,如下所示以按顺序执行过滤器

[FilterOne(Order = 1), FilterTwo(Order = 2)]
[FilterOne(Order = 1), FilterTwo(Order = 2)]