我的自定义操作过滤器很少,例如
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
答案 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