Wydaje się, że te dwa mają podobny cel. Byłoby wspaniale zobaczyć kilka przykładów, kiedy używać jednego z drugim, plusy i minusy, a także wskazywać na najważniejsze różnice.Kiedy używać HttpMessageHandler vs ActionFilter?
Odpowiedz
Główna różnica między nimi to ich ostrość. Message Handlery są stosowane do wszystkich żądań HTTP. Wykonują one funkcję pośrednika HTTP. Filtry mają zastosowanie tylko do żądań, które są wywoływane do określonego kontrolera/działania, w którym zastosowano filtr .
Powinieneś używać MessageHandlers, jeśli chcesz, aby zachowanie było stosowane w większości żądań. Filtry powinny być używane, gdy mają tylko zastosowanie do określonych zasobów.
można również zastosować do wszystkich żądań HTTP, jeśli są one dodawane jako filtry globalne. – frennky
Skąd to pochodzi? –
http://blogs.msdn.com/b/kiranchalla/archive/2012/05/05/asp-net-mvc4-web-api-stack-diagram.aspx –
duża różnica pomiędzy obsługą i filtrów działania jest etapem, w którym są one wykonywane. Filtry działania są wykonywane po wysłaniu kontrolera i powiązaniu modelu, więc masz możliwość interakcji z instancją kontrolera, która obsługuje żądanie, a także ma bezpośredni dostęp do wpisanych obiektów modelu, które są przekazywane do metody działania. Użyłem tego podejścia do wykonania zaawansowanego rejestrowania wartości żądania/odpowiedzi - ponieważ mogłem uzyskać dostęp do kontrolera, mogłem rejestrować dodatkowe informacje o tym, jak obsługiwane było żądanie.
koparki wiadomości są wykonywane wcześniej w tym procesie, i działają znacznie bliżej do wartości surowego żądanie/odpowiedź niż filtrów (kontrastują z HttpRequestMessage/HttpResponseMessage przedmiotów używanych w teleskopowe z dużo-bogatszy HttpActionContext i HttpActionExecutedContext obiekty dostępne w ciągu filtrów). Dzięki temu są potencjalnie bardziej wydajne w przypadku niektórych działań, na przykład, jeśli próbujesz ustalić, czy musisz wcześniej przerwać żądanie. Jeśli wiesz, że żądanie powinno zostać odrzucone, program obsługi pozwoli ci to zrobić, zanim infrastruktura WebApi przejdzie do wysiłku tworzenia instancji kontrolera, wykonywania wiązania modelu itd.
Kolejną różnicą jest to, że procedury obsługi są powiązane, a masz większą kontrolę nad sposobem wykonywania łańcucha. Chociaż filtry są wywoływane w sekwencji, ustawienie odpowiedzi w jednym filtrze skutecznie kończy żądanie, uniemożliwiając wykonanie następnego filtru na liście. Na przykład, jeśli masz pierwszy filtr, który zwraca nieprawidłowe żądanie, jeśli Twój model ma wartość NULL, i drugi filtr do zalogowania się do żądania, drugi filtr nie zostanie wykonany, gdy złe żądanie zostanie wygenerowane przez pierwszy filtr. Z handler'em nadal będzie możliwe (choć niekoniecznie wskazane!), Aby wywołać obsługę wewnętrzną i pozwolić, aby łańcuch obsługi działał normalnie.
- 1. Kiedy używać SQLITE_TRANSIENT vs SQLITE_STATIC?
- 2. Kiedy używać HtmlControls vs WebControls
- 3. Kiedy używać = domyślny vs = usuń
- 4. Kiedy używać approxfun vs. ok.
- 5. Kiedy używać Haystack/ElasticSearch vs ORM Django
- 6. Couchbase - Kiedy powinienem używać N1QL vs Widoki?
- 7. https vs ssl- kiedy używać co
- 8. KIEDY używać serializacji vs zwykły POST
- 9. Kiedy należy używać `publishReplay` vs` shareReplay`?
- 10. Kiedy używać Cassandra vs Solr w DSE?
- 11. Kiedy należy używać Mockery vs JUnit4Mockery?
- 12. Storm vs. Trident: Kiedy nie używać Trident?
- 13. Kiedy powinieneś używać === vs ==,! == vs! =, Etc .. w javascript?
- 14. Async/Await VS Task.Run: Kiedy używać? Jak używać?
- 15. Kiedy używać Class.isInstance() i kiedy używać operatora instanceof?
- 16. Kiedy używać node.js i kiedy używać ajax?
- 17. kiedy używać zadania i kiedy używać wątku?
- 18. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 19. apt vs wsgen vs wsimport. Konfundowanie na temat czego używać i kiedy nie używać innego
- 20. Kiedy używać StringBuilder?
- 21. strcat Vs strncat - Kiedy należy używać której funkcji?
- 22. Qt5 QML, kiedy używać kolumny ColumnLayout vs Column?
- 23. Java Generic Interface vs Generic Methods, a kiedy używać jednego
- 24. Kiedy używać volatile vs synchronization w wielowątkowość w java?
- 25. CNG: Kiedy używać funkcji BCrypt * vs NCrypt * rodziny funkcji
- 26. Domena vs DTO a ViewModel - jak i kiedy ich używać?
- 27. IEnumerable, IEnumerator vs foreach, kiedy używać tego, co
- 28. Kiedy w Railsach należy używać `DateTime.now.utc` vs.` Time.current.utc`?
- 29. Kiedy używać Przenieś Konstruktory/Przydziały
- 30. Kiedy używać "funkcji" zamiast "zabawy"?
http://forums.asp.net/t/1804456.aspx – user960567
Lepszym pytaniem może być moment użycia HttpMessageHandler vs * global * ActionFilter. To wydaje się trochę bardziej mgliste. Filtry –