当究竟做OnResultExecuted和OnResultExecuting火?(When exac

2019-07-29 05:42发布

我创建一个自定义的ActionFilterAttribute以改造ViewResult S和重定向到JsonResult在Ajax请求秒。 我有线大部分通过单元测试,我是出于某种原因假设我改造不得不发生在OnResultExecuting ,我意识到这是没有的情况下,并覆盖了正确的方法OnActionExecuted ,它立即调用的动作方法返回一个结果。

我的问题是,当究竟是OnResultExecutedOnResultExecuting被调用,因为我已经在所有四个覆盖,只有在那些断点OnActionExecutingOnActionExecuted在所有射击。

Answer 1:

让我们来看看下面的例子执行您所描述的转变:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            var result = filterContext.Result as ViewResultBase;
            if (result != null && result.Model != null)
            {
                filterContext.Result = new JsonResult
                {
                    Data = result.Model,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
        }
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
    }
}

OnResultExecuting方法会立即行动结果的之前被调用ExecuteResult方法运行和OnResultExecuted后立即方法。



Answer 2:

找了一会儿,并试图了解接受的答案,我发现在这之后。 我认为,这显示了执行的顺序是

  1. OnActionExecuting
  2. OnActionExecuted
  3. OnResultExecuting
  4. OnResultExecuted

下检查清单2.此链接http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs



文章来源: When exactly do OnResultExecuted and OnResultExecuting fire?