2014-10-24 11 views
5

Nell'API Web ASP.NET, le richieste e le risposte HTTP vengono elaborate in una pipeline sul server.Gestori di messaggi e il modulo Http?

Se voglio aggiungere qualche logica o comportamento globale nelle primissime fasi della pipeline, dovrei farlo nel gestore dei messaggi. (ad esempio: autenticazione)

Ma che dire della pipeline del modulo Http? dove si inserisce tutta questa storia?

Guardando questa fase del ciclo di vita numerate web API:

http://i.stack.imgur.com/jkQe8.jpg

enter image description here

Ma guardando gli eventi generali modulo HTTP (contiene di più, ma ...) enter image description here

Domanda:

- Come questi 2 sistemi si combinano e dove? Voglio dire se c'era 1 immagine che contiene web api e modulo http, come sarebbero i numeri? (Ho aggiunto numeri nelle immagini per facilitare il riferimento)

- Ho sempre sentito dire che se voglio fare le cose in anticipo sulla pipeline dovrei usare i gestori di messaggi, ma per quanto riguarda HttpModule's BeginRequest per esempio? So che ci sono oggetti che sono nulli in questa fase, ma ancora, le fasi successive del httpmodule fanno gonfiare gli oggetti di HttpContetxt - eppure, i ragazzi di webapi dicono: usa MessageHandlers .... (si riferisce al fatto dell'ambiente selfhoster)?

risposta

5

Per combinare la figura in basso in quella in alto, immagina la casella IHttpHandler nella figura in alto corrisponde a ASPX nell'immagine in basso in modo da posizionare l'immagine in basso a sinistra in basso di quella in alto. Quindi, 8 e 9 fanno parte della pipeline IIS ASP.NET. La pipeline di IIS esegue moduli, ecc. E termina quando un gestore gestisce la richiesta. Con l'API Web, il gestore risulta essere HttpControllerHandler ed è qui che inizia la pipeline dell'API Web. Se si guarda HttpControllerHandler, la richiesta e la risposta sono specifiche ASP.NET alla sua sinistra e alla sua destra diventa HttpRequestMesssage che è specifica dell'API Web.

Alla seconda domanda, il primo che si può fare nella pipeline dell'API Web sarà un gestore di messaggi. HttpModule sarà ancora più presto ma non fa parte dell'API Web ma dell'hosting. Il compromesso è che se si dispone di un HttpModule, è possibile utilizzarlo solo in IIS mentre un gestore di messaggi può essere eseguito in qualsiasi host, poiché è specifico dell'API Web e specifico dell'host. Continuo a riferirmi al mio articolo MSDN nelle mie recenti risposte al SO, ma poi succede che l'articolo sia pertinente alle domande poste. Quindi, non ho altro da fare se non collegarlo di nuovo. Qui voi go. Ho confronto di diverse opzioni in quell'articolo.

+0

Davvero ottimo, l'ho letto due volte. –