检查MVC 5中是否正在使用其他操作过滤器属性

时间:2017-03-31 07:14:36

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 actionfilterattribute

我的自定义操作过滤器很少,例如

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

在我的行动方法

[CustomFilter]
[CustomFilterNew]
public ActionResult Index()
{
   return View();
}
  

让我们说CustomFilterNew完全与CustomFilter相反。

在这种情况下,如何防止一个过滤器操作执行另一个过滤器操作,可以说 CustomFilterNew 应该禁止执行 CustomFilter

1 个答案:

答案 0 :(得分:0)

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

有很多方法可以按照以下方式执行此操作

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

OR

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    //Check your condition here
    if (true)
    {
        //Create your result
        filterContext.Result = new EmptyResult();
    }
    else
        base.OnActionExecuting(filterContext);
}

OR

public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
    ...
    if (needToRedirect) //your condition here
    {
       ...
       filterContext.Result = new RedirectToAction(string action, string controller)
       return;
    }
    ...
 }

此处我还要提到如何设置过滤器的Order工具,您可以按{0}} Order按顺序执行过滤器

Action Filters