2013-09-06 4 views
6

Die DelegatingHandler erben von HttpMessageHandler. Aber ich habe den Unterschied nicht verstanden, vorausgesetzt, dass Sie die gleiche Methode SendAsync implementieren müssen, um beide zu arbeiten.HttpMessageHandler vs DelegierenHandler

Was ist der Unterschied zwischen diesen beiden Handlern? Wann sollte ich jeden benutzen?

Antwort

14

Wenn Sie mit ASP.NET vertraut sind, dann ist eine gute Analogie HTTP-Handler und Module. Wenn Sie ein HttpMessageHandler implementieren, implementieren Sie die Methoden Send und SendAsync und geben eine Antwort oder ein Versprechen einer Antwort zurück. Dies ähnelt einem Http-Handler. Wenn Sie ein DelegatingHandler implementieren und es der config.MessageHandlers-Auflistung hinzufügen, wird Ihre Klasse in der Pipeline ausgeführt und bietet die Möglichkeit, die Anforderung und die Antworten genau wie ein HTTP-Modul zu sehen und darauf zu reagieren. DelegatingHandler ist auch ein HttpMessageHandler mit der Ausnahme, dass als Teil der SendAsync Implementierung, ruft es nur die SendAsync der inneren Handler. Der innere Handler wird das gleiche tun und Sie bekommen die chinesischen Schachteln oder den russischen Puppeneffekt. HttpServer, wo die Pipeline beginnt, ist selbst eine DelegatingHandler.

+0

Wer weiß, wie Nachrichten-Handler in web.config konfigurieren – Gurpreet

0

Der Unterschied ist sehr subtil. @Badri gab dir eine gute kurze Erklärung.

Mit Blick auf at this poster, erkennen Sie, worum es geht. Denken Sie daran, dass Sie beim Erstellen eigener DelegatingHandler nicht mit irgendetwas zu tun haben, das nicht speziell HTTP-Zeug ist. Das ist nicht der richtige Ort, um mit dem BODY im Falle eines POST zu spielen. beispielsweise.

Eine nützliche Sache, die Sie tun können, ist sehr früh in der Rohrleitung zu erkennen, dass ein Token nicht in den Headern vorhanden ist, dann können Sie dann und dort die Anfrage beenden und eine StatusCode.Forbidden Antwort erstellen. Natürlich braucht eine einfache Webseite das nicht. Nur ein Overkill. Aber wenn Sie Millionen von Anrufen pro Minute erhalten, ist es sehr praktisch, da es passiert, bevor der Controller tatsächlich instanziiert wird.

Es gibt nur wenige Fälle, in denen Sie das wirklich brauchen. Oder sagen, dass der Client, der den Rest aufruft, nur GET und POST ausführen kann, aber in den Headern ein X-Method-Override = PUT angibt, dann können Sie an dieser Stelle die Request-Methode von POST zu PUT ändern, so dass Ihr Controller/action dispatcher erstellt die richtige Instanz und ruft die richtige Aktion auf.

Hier ist das interessante Poster. PRINT IT: D

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

Verwandte Themen