2010-12-14 12 views

Respuesta

10

En realidad, son simplemente diferentes puntos de canalización de ejecución MVC.

  1. ExecuteCore es llamado por MvcHandler después propio controlador se crea una instancia. En este momento MVC ni siquiera sabe cómo el controlador invocará su acción. Puede reemplazar el estándar ExecuteCore del controlador para modificar su proceso de ejecución general un poco.

  2. OnActionExecuting es una historia completamente diferente de . Se llama durante la invocación de filtros de acción por ControllerActionInvoker. Por eso punto MVC ya se sabe que la acción existe, la invoca, obtiene todos los filtros (generalmente definida como atributos) y lo ejecuta en un momento dado de la tubería de ejecución general (OnActionExecuting, OnActionExecuted, OnResultExecuting etc.)

Depende de qué es exactamente lo que quiere lograr la hora de decidir qué momento la extensión de su uso.

  • Override ExecuteCore en derivado controlador para ajustar su comportamiento común (no realmente a menudo el caso en aplicación normal).
  • utilizar filtros para realizar algunas tareas adicionales que parecen ortogonal a lo acion sí tiene que hacer (a menudo se trata de algún lógica AOP-como o se refiere a la gestión de sesión/transacción de base de datos).
5

ExecuteCore se invoca justo después de que se haya inicializado el controlador, mientras que OnActionExecuting ocurre en una etapa posterior de la canalización de ejecución y se invoca inmediatamente antes de que se invoca la acción del controlador. En el segundo método se puede manipular directamente el ActionResult y un cortocircuito en la ejecución de la acción mediante la reorientación de, por ejemplo, a alguna otra acción:

filterContext.Result = ... 
+2

¿Qué tipo de escenarios son adecuados para cada método? Vi un ejemplo de localización, utilizó ExecuteCore para obtener configuraciones de idioma/cultura. He usado OnActionExecuting para agregar algunos viewdata comunes que todas las acciones usan ... solo curioso. ¡Gracias! – Chaddeus

Cuestiones relacionadas