asp.net - net - ¿Cuándo se activan exactamente OnResultExecuted y OnResultExecuting?
cuáles son los action filters in mvc (2)
Estoy creando un ActionFilterAttribute
personalizado para transformar ViewResult
y redirigir en JsonResult
s durante las solicitudes de ajax. He conectado la mayor parte de él a través de pruebas unitarias y, por alguna razón, asumí que mi transformación tenía que realizarse en OnResultExecuting
, me di cuenta de que este no era el caso y que el método correcto para anular era OnActionExecuted
, que se llama tan pronto como El método de acción devuelve un resultado.
Mi pregunta es cuándo se están OnResultExecuted
exactamente a OnResultExecuted
y a OnResultExecuting
ya que tengo puntos de interrupción en las cuatro invalidaciones y solo los de OnActionExecuting
y OnActionExecuted
están disparando.
Después de buscar un rato e intentar comprender la respuesta aceptada encontré esto. Creo que esto demuestra que la orden de Ejecución es
- OnActionExecuting
- OnActionExecuted
- OnResultExecuting
- OnResultEjecutado
Consulte este enlace en la lista 2. http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs
Tomemos el siguiente ejemplo que realiza la transformación que describiste:
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)
{
}
}
El método OnResultExecuting
se invocará inmediatamente antes de que se ejecute el método ExecuteResult
del resultado de la acción y el método OnResultExecuted
inmediatamente después.