Asp.net OnResultExecuted和OnResultExecuting火灾的具体时间?

Asp.net OnResultExecuted和OnResultExecuting火灾的具体时间?,asp.net,asp.net-mvc,asp.net-mvc-3,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在创建一个自定义的ActionFilterAttribute,以便在ajax请求期间转换ViewResults并重定向到JsonResults。我通过单元测试完成了大部分工作,出于某种原因,我假设我的转换必须在OnResultExecuting中进行,我意识到情况并非如此,正确的重写方法是OnActionExecuted,只要action方法返回结果,就会调用它 我的问题是,OnResultExecuted和OnResultExecuting究竟什么时候被调用,因为我在所有四个覆盖中都有断点

我正在创建一个自定义的
ActionFilterAttribute
,以便在ajax请求期间转换
ViewResult
s并重定向到
JsonResult
s。我通过单元测试完成了大部分工作,出于某种原因,我假设我的转换必须在
OnResultExecuting
中进行,我意识到情况并非如此,正确的重写方法是
OnActionExecuted
,只要action方法返回结果,就会调用它


我的问题是,
OnResultExecuted
OnResultExecuting
究竟什么时候被调用,因为我在所有四个覆盖中都有断点,只有
OnActionExecuting
OnActionExecuted
中的断点触发描述:

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)
    {
    }
}

该方法将在操作结果的方法运行之前立即调用,之后立即调用。

在查找了一段时间并试图理解接受的答案后,我发现了这一点。我认为这表明执行的顺序是正确的

  • OnActionExecuting
  • 已执行的操作
  • OnResultExecuting
  • OnResultExecuted
  • 检查清单2中的这个链接