如何从ActionFilter跳过动作执行?

use*_*126 38 asp.net-mvc action-filter

是否可以跳过整个动作方法执行并ActionResult在满足某个条件时返回特定的OnActionExecuting

Ric*_*SFT 34

请参阅我的下载示例和MSDN文章在ASP.NET MVC中过滤.

您可以通过将属性设置为非空值来取消OnActionExecutingOnResultExecuting方法中的过滤器执行Result.

不会调用任何挂起OnActionExecutedOnActionExecuting过滤器,并且调用者不会OnActionExecuted为取消的过滤器或挂起的过滤器调用该方法.

OnActionExecuted先前运行的过滤器的过滤器将运行.所有OnResultExecutingand OnResultExecuted过滤器都将运行.

示例中的以下代码显示了在ActionResult满足特定条件时如何返回特定内容OnActionExecuting:

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{
    filterContext.Result = new RedirectResult("~/Home/Index");
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index");
}
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,如果您有多个过滤器并且过滤器的顺序很重要,则应在注册过滤器时指定"Order"参数,以便您可以控制执行顺序,因为Rick在其详细信息中概述了Result filterContext .Result属性表现. (2认同)

tpe*_*zek 25

您可以使用filterContext.Result.它应该如下所示:

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