2012-09-05 1 views
12

Gibt es so etwas für die allgemeine Methodenreihenfolge?Ausführungsreihenfolge für den 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

My Web Api Lösung hat jetzt eine neue Ordnung in der Ausführung einiger Verfahren, da ich von Beta/RC-Version auf RTM-Version aktualisiert. (Es ist nicht die umgekehrte Reihenfolge der Nachrichten-Handler Ausführung)

Anfang dieses Verfahren des APIControllers genannt wurde:

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

Vor dem filtermethods meines AuthorizationFilter

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

Nach RTM der OnAuthorization ist vor Initialize() aufgerufen. Gibt es Informationen über die Ausführungsreihenfolge der ApiController-Methoden und die Änderungen nach der RTM-Freigabe?

+0

nicht wahr? Woher kommt InitialProcadController? So etwas hat es bisher im Quellcode des Projekts, AFAIK, nicht gegeben. – tugberk

+0

Entschuldigung, ich meine die "Initialize()" Methode – user437899

Antwort

34

die Anfrage in das ApiController Umfang geht Angenommen, ist der Vorgang, um, wie unten:

  • ExecuteAsync Die Methode des ApiController aufgerufen.
  • Die Initialize Methode der ApiController wird aufgerufen.
  • Der registrierte Aktions-Selektor wird abgerufen.
  • Die Methode SelectAction des registrierten Aktionselektors wird aufgerufen. Wenn nur eine Aktionsmethode übereinstimmt, wird die Pipeline fortgesetzt.
  • Alle registrierten Filter für die ausgewählte Aktion werden abgerufen.
  • Die Autorisierungsfilter werden aufgerufen. Der Autorisierungsfilter kann entscheiden, ob die Pipeline weiter ausgeführt oder die Pipeline beendet werden soll.
  • Wenn Autorisierungsfilter die Anforderung nicht beendet haben, werden Aktionsparameterbindungen ausgeführt.
  • ApiController.ModelState ist eingestellt.
  • Aktion Filter werden aufgerufen. Die Aktionsfilter können entscheiden, ob die Pipeline die Pipeline weiter ausführen oder terminieren soll.
  • Wenn Aktionsfilter die Anforderung nicht beendet haben, wird der registrierte Aktionsaufrufer abgerufen.
  • Die Methode InvokeActionAsync des registrierten Aktionsaufrufers wird aufgerufen, um die ausgewählte Aktionsmethode aufzurufen.
  • Hinweis: Wenn eine Ausnahme von der Ausführung der Autorisierungsfilter bis zur Ausführung der Aktionsmethode auftritt, werden die Ausnahmefilter aufgerufen.

Es gibt ein paar mehr Dinge, die dazwischen passieren, aber das ist sehr nah an einer vollständigen Ansicht. Weitere Informationen finden Sie unter ApiController source code.

+3

Und deshalb OperationHandlers waren wirklich cool. Was für ein Chaos. –

+0

Ich habe OperationHandlers auf Google gefunden, aber nicht, wie ich meinen benutzerdefinierten OperationHandler registriere ... – user437899

+1

BTW: Autorisierungsfilter werden vor den generischen "normalen" Filtern aufgerufen. – user437899