2012-09-05 13 views
12

¿Hay algo como esto para el orden de método común?Orden de ejecución para el ApiController

http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-46-38-WebApiStackDiagramsNew/6428.ASP.NET_5F00_MVC4_5F00_WebAPI_5F00_StackDiagram_5F00_Future.jpg

Mi solución Api Web tiene ahora un nuevo orden en la ejecución de algunos métodos ya he actualizado desde la versión Beta/RC a la versión RTM. (No es el orden inverso al de la ejecución del gestor de mensajes)

Anteriormente se llama a este método de las APIControllers:

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext) 
{ 
} 

Antes de las filtermethods de mi AuthorizationFilter

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
{ 
} 

Después de RTM del OnAuthorization es llamado antes de Initialize(). ¿Hay alguna información sobre el orden de ejecución de los métodos de ApiController y los cambios después del lanzamiento de RTM?

+0

¿eh? ¿De dónde viene InitializeProcadController? No ha habido tal cosa dentro del código fuente del proyecto hasta el momento, AFAIK. – tugberk

+0

lo siento, me refiero al método "Initialize()" – user437899

Respuesta

34

Suponiendo que la petición entra en el alcance ApiController, el orden de la operación es la siguiente:

  • El método de la ApiControllerExecuteAsync se invoca.
  • Se invoca el método Initialize del ApiController.
  • Se recupera el Selector de acciones registrado.
  • Se invoca el método SelectAction del selector de acciones registradas. Si solo se combina un método de acción, la tubería continúa.
  • Se recuperan todos los filtros registrados para la acción seleccionada.
  • Se llaman los filtros de autorización. El filtro de autorización puede decidir dejar que la tubería continúe ejecutando o finalizando la canalización.
  • Si los filtros de autorización no terminaron la solicitud, se realizan los enlaces de parámetros de acción.
  • ApiController.ModelState está configurado.
  • Los filtros de acción se invocan. Los filtros de acción pueden decidir dejar que la tubería continúe ejecutando o finalizando la canalización.
  • Si los filtros de acción no terminaron la solicitud, se recupera Action Invoker registrado.
  • Se llama al método InvokeActionAsync del Action Invoker registrado para invocar el método de acción seleccionado.
  • Nota: Si se produce una excepción desde la ejecución de los filtros de autorización hasta la ejecución del método de acción, se invocarán los filtros de excepción.

Hay algunas cosas más que ocurren en el medio, pero esto está muy cerca de una vista completa. Consulte el ApiController source code para obtener más información.

+3

Y esta es la razón por la cual OperationHandlers fue realmente genial. Que desastre. –

+0

Encontré OperationHandlers en google, pero no cómo registro mi OperationHandler personalizado ... – user437899

+1

BTW: los filtros de autorización se llaman antes que los filtros genéricos "normales". – user437899

Cuestiones relacionadas