2013-09-06 12 views
6

Il DelegatingHandler eredita da HttpMessageHandler. Ma non ho capito la differenza, dato che è necessario implementare lo stesso metodo, SendAsync per far funzionare entrambi.HttpMessageHandler vs DelegatingHandler

Qual è la differenza tra questi due gestori? Quando dovrei usare ciascuno?

risposta

14

Se si ha familiarità con ASP.NET, una buona analogia sarà costituita da gestori e moduli HTTP. Se si implementa un HttpMessageHandler, si implementano i metodi Send e SendAsync e si restituisce una risposta o una promessa di risposta. Questo è simile a un gestore Http. Se si implementa uno DelegatingHandler e lo si aggiunge alla raccolta config.MessageHandlers, la classe viene eseguita nella pipeline e ottiene l'opportunità di vedere e reagire alla richiesta e alle risposte, proprio come un modulo HTTP. DelegatingHandler è anche un HttpMessageHandler eccetto che come parte dell'implementazione SendAsync, chiama solo il SendAsync del gestore interno. L'handler interno farà lo stesso e otterrai le scatole cinesi o l'effetto delle bambole russe. HttpServer, dove la pipeline inizia è a sua volta DelegatingHandler.

+0

Qualcuno sa come configurare gestori di messaggi in web.config – Gurpreet

0

La differenza è molto sottile. @Badri ti ha dato una buona spiegazione veloce.

Alla ricerca di at this poster, ti rendi conto di cosa si tratta. Tieni presente che quando crei i tuoi DelegatingHandlers, non devi scherzare con qualcosa che non sia specificamente materiale HTTP. Non è il posto giusto per giocare con il CORPO nel caso di un POST. per esempio.

Una cosa utile che si può fare è rilevare molto presto nella pipe che un token non è presente nelle intestazioni, quindi è possibile terminare subito allora e lì la richiesta e creare una risposta StatusCode.Forbidden. Certo, forse un semplice sito web non ne ha bisogno. Solo un eccesso. Ma se ricevi milioni di chiamate al minuto, è molto utile poiché accade proprio prima che il controller venga effettivamente istanziato.

Ci sono solo alcuni casi in cui avrete davvero bisogno di questo. O dire che il client che effettua il resto chiama, può solo fare GET e POST ma nelle intestazioni sta specificando un X-Method-Override = PUT, quindi puoi a questo punto modificare il metodo di richiesta da POST a PUT, in modo che il tuo controller/I dispatcher di azioni creano l'istanza giusta e chiamano l'azione giusta.

Ecco il poster interessante. STAMPA IT: D

http://www.asp.net/media/4071077/aspnet-web-api-poster.pdf

Problemi correlati