2013-02-24 9 views
7

Jaka jest różnica między używaniem MessageHandler a filtrem w celu sprawdzenia klucza API w nagłówku żądania dla projektu aplikacji webowej MVC.MessageHandlers vs Filtry w asp.net mvc web api project

I widać, że jest tam także przedstawione przykład MessageHandler tylko dla tego celu w http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

np

GlobalConfiguration.Configuration.MessageHandlers.Add(new ApiKeyHandler()); 

Ale wygląda na to, że mogę zrobić to samo za pomocą filtra.

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

Zakładając ApiKeyFilter i ApiKeyHandler zarówno wystarczy spojrzeć na nagłówku żądania i sprawdzić klucz API, który sposób jest bardziej efektywny? Co za różnica?

Odpowiedz

6

MessageHandlers działa znacznie wcześniej niż filtry.

zamówienia jest:

-MessageHandler

-Authorization filtr

-Model wiążące

-Pozostałe filtry

rzeczy związane z bezpieczeństwem powinny działać tak szybko, jak to możliwe.

+0

jeśli chcę tylko sprawdzić żądanie i odpowiedź, na przykład po prostu rejestrowanie żądania i ładunku odpowiedzi, co powinno być preferowane? ponieważ filtry i procedury obsługi mogą sobie z tym poradzić. Handlery mogą być również zależne od trasy. Czy "sprawy związane z bezpieczeństwem" to jedyny wyróżnik, jeśli chodzi o przypadki użycia każdego z nich? –

+1

Chodzi o określenie zakresu i kolejność wykonania. Ponieważ obsługa komunikatów wydaje się odejść w trybie vnext - wolałbym raczej używać oprogramowania pośredniego Katana do logowania. – leastprivilege

+0

dziękuję, wciąż jestem zdezorientowany. Tylko dlatego, że moje podstawowe prawa są prawidłowe, zakładamy, że nie mamy katany.Jeśli użyję filtrów do logowania to będzie jakaś wada. Rozumiem, że w przypadku rzeczy, które muszą zostać wykonane na bardzo wczesnym etapie, należy zastosować obsługę. ale załóżmy, że nie mam żadnego takiego wymogu przy logowaniu, co jest lepszym wyborem (obsługa lub filtry). Logowanie to tylko przykład, który zacytowałem do dyskusji. dzięki znowu –