When exactly do OnResultExecuted and OnResultExecuting fire?

asp.net, asp.net-mvc, asp.net-mvc-3

Solution

Let's take the following example which performs the transformation you described:

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

The `OnResultExecuting` method will be invoked immediately before the action result's `ExecuteResult` method runs and the `OnResultExecuted` method immediately after.

Problem

I'm creating a custom `ActionFilterAttribute` in order to transform `ViewResult`s and redirects into `JsonResult`s during ajax requests. I've wired most of it through unit testing and I was for some reason assuming my transformation had to take place in `OnResultExecuting`, I realized this was not the case, and the correct method to override was `OnActionExecuted`, which is called as soon as the action method returns a result. My question is when exactly are `OnResultExecuted` and `OnResultExecuting` being called since I've breakpoints in all four overrides and only the ones in `OnActionExecuting` and `OnActionExecuted` are firing at all.

Original source