Подтвердить что ты не робот

Когда точно выполняются OnResultExecuted и OnResultExecuting?

Я создаю пользовательский ActionFilterAttribute, чтобы преобразовать ViewResult и перенаправлять в JsonResult во время запросов ajax. Я провел большую часть этого тестирования с помощью модульного тестирования, и по какой-то причине я предполагал, что мое преобразование должно было состояться в OnResultExecuting, я понял, что это не так, и правильный метод для переопределения был OnActionExecuted, который называется как только метод действия возвращает результат.

Мой вопрос в том, когда именно вызывается OnResultExecuted и OnResultExecuting, так как у меня есть точки останова во всех четырех переопределениях, и только те, что есть в OnActionExecuting и OnActionExecuted, запускаются вообще.

4b9b3361

Ответ 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 сразу после.