2012-09-05 19 views
12

Esiste qualcosa come questo per l'ordine di metodo comune?Ordine di esecuzione per l'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

La mia soluzione Web Api ha ora un nuovo ordine nell'esecuzione di alcuni metodi da quando ho aggiornato da Beta/versione RC alla versione RTM. (La sua non è l'ordine inverso di esecuzione gestore di messaggi)

All'inizio di questo metodo dei APIControllers è stato chiamato:

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

Prima i filtermethods della mia AuthorizationFilter

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

Dopo RTM l'OnAuthorization è chiamato prima di Initialize(). Ci sono delle informazioni sull'ordine di esecuzione dei metodi ApiController e sulle modifiche dopo la versione RTM?

+0

eh? da dove proviene InitializeProcadController? Finora non c'è stata una cosa del genere nel codice sorgente del progetto, AFAIK. – tugberk

+0

mi spiace intendo il metodo "Initialize()" – user437899

risposta

34

Supponendo che la richiesta entra nella portata ApiController, l'ordine operazioni sono le seguenti:

  • Il metodo della ApiControllerExecuteAsync viene invocato.
  • Viene invocato il metodo Initialize dello ApiController.
  • Il selettore di azione registrato viene recuperato.
  • Viene richiamato il metodo SelectAction del selettore di azioni registrato. Se viene abbinato un solo metodo di azione, la pipeline continua.
  • Vengono recuperati tutti i filtri registrati per l'azione selezionata.
  • I filtri di autorizzazione sono chiamati. Il filtro di autorizzazione può decidere se consentire alla pipeline di continuare l'esecuzione o di terminare la pipeline.
  • Se Filtri di autorizzazione non hanno terminato la richiesta, i collegamenti dei parametri di azione vengono eseguiti.
  • ApiController.ModelState impostato.
  • Azione I filtri vengono richiamati. I filtri azione possono decidere se consentire alla pipeline di continuare a eseguire o terminare la pipeline.
  • Se i filtri di azione non hanno terminato la richiesta, viene recuperata l'azione Invoker registrata.
  • Il metodo InvokeActionAsync dell'azione registrata Invoker viene chiamato per invocare il metodo di azione selezionato.
  • Nota: se si verificano eccezioni dall'esecuzione dei filtri di autorizzazione all'esecuzione del metodo di azione, i filtri delle eccezioni vengono richiamati.

Ci sono alcune altre cose che accadono in mezzo, ma questo è molto vicino a una vista completa. Controlla il ApiController source code per ulteriori informazioni.

+3

E questo è il motivo per cui OperationHandlers è stato davvero eccezionale. Che casino. –

+0

Ho trovato OperationHandlers su google, ma non come registro la mia operazione personalizzataHandler ... – user437899

+1

BTW: i filtri di autorizzazione sono chiamati prima dei generici filtri "normali". – user437899

Problemi correlati