2013-02-24 7 views
7

Was ist der Unterschied zwischen einem MessageHandler vs Filter zu verwenden, um nach einem API-Schlüssel in der Anforderung Header für ein MVC-Web-API-Projekt zu suchen.MessageHandlers vs Filter in asp.net MVC Web API-Projekt

Ich sehe, dass es ein gut skizzierte Beispiel eines Message ist nur für diesen Zweck in http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

z.B.

Aber es sieht so aus, als könnte ich das Gleiche mit einem Filter tun.

GlobalConfiguration.Configuration.Filters.Add(new ApiKeyFilter()); 

Unter der Annahme, ApiKeyFilter und ApiKeyHandler beide nur Blick auf den Request-Header und prüfen Sie den api-Schlüssel, die Art und Weise effizienter ist? Was ist der Unterschied?

Antwort

6

MessageHandlers laufen viel früher als Filter.

die Reihenfolge ist:

-MessageHandler

-Authorization Filter

-Model

-Weitere Filter

Sicherheit bezogenes Bindung sollte so früh wie möglich ausgeführt werden.

+0

Wenn ich nur Anfrage und Antwort überprüfen möchte, zum Beispiel nur die Anfrage und Antwort Payload protokollieren, was sollte dann bevorzugt werden? weil Filter und Handler damit umgehen können. Handler können auch pro Route spezifisch sein. So "Security related stuff" ist das einzige Unterscheidungsmerkmal, wenn es um die Anwendungsfälle von jedem kommt? –

+1

Es geht um Scoping und um die Reihenfolge der Ausführung. Da die Message-Handler anscheinend in vnext verschwinden, würde ich lieber Katana-Middleware für die Protokollierung verwenden. – leastprivilege

+0

danke, ich bin immer noch verwirrt.Nur um meine Grundlagen zu bekommen, bitte nehmen wir an, dass wir Katana nicht haben. Wenn ich Filter für die Protokollierung verwende, wird es einen Nachteil geben. Ich verstehe, dass für Dinge, die sehr früh ausgeführt werden müssen, sollten Handler verwendet werden. aber nehme an, dass ich keine solche Anforderung mit Protokollierung habe, die eine bessere Wahl ist (Handler oder Filter). Logging ist nur ein Beispiel, das ich für die Diskussion zitiere. Nochmals vielen Dank –