asp.net core a filtry

86

Po przeczytaniu informacji o oprogramowaniu pośredniczącym asp.net core, nie wiem, kiedy należy używać filtrów, a kiedy oprogramowania pośredniego, ponieważ wydają się one osiągać ten sam cel. Kiedy zamiast fitlerów należy używać oprogramowania pośredniego?

Arvand
źródło
1
Ta dokumentacja dotyczy tego konkretnego pytania. docs.microsoft.com/en-us/aspnet/core/mvc/controllers/ ...
Nkosi

Odpowiedzi:

80

Na kanale 9 jest film o tym: ASP.NET Monsters # 91: Middleware vs. Filters . Podsumowując wideo:

Rozpoczyna się wykonywanie żądania i mamy oprogramowanie pośredniczące i inne oprogramowanie pośredniczące, myślimy o nim jak o „rosyjskich lalkach wewnątrz lalek” i ostatecznie uruchamia się oprogramowanie pośredniczące routingu, a następnie żądanie trafia do linii MVC. wprowadź opis obrazu tutaj Więc jeśli nie potrzebujesz kontekstu MVC (powiedzmy, że martwisz się przepływem i wykonywaniem, na przykład odpowiadaniem na nagłówki, jakimś mechanizmem wstępnego routingu itp.), Użyj oprogramowania pośredniego .
Ale jeśli potrzebujesz kontekstu MVC i chcesz operować na akcjach, użyj filtrów .

Arvand
źródło
Tak więc, jeśli mam logikę, którą chcę uruchamiać na każdym żądaniu (na przykład rejestrowanie), tylko niektóre z nich są związane z MVC, umieściłbym to w oprogramowaniu pośrednim, a następnie poproś program obsługi filtru, aby wykonał dowolną określoną logikę, która może być do tego wymagana, a następnie ponownie przesłać do oprogramowania pośredniego?
Terry H
64

Oprogramowanie pośredniczące działa na poziomie ASP.NET Core i może działać na każde żądanie przychodzące do aplikacji.

Z drugiej strony filtry MVC działają tylko w przypadku żądań przychodzących do MVC.

Na przykład, gdybym chciał wymusić, że wszystkie żądania muszą być przesyłane przez HTTPS, musiałbym do tego użyć oprogramowania pośredniczącego. Gdybym utworzył filtr MVC, który to zrobił, użytkownicy mogliby nadal żądać np. Plików statycznych przez HTTP.

Ale z drugiej strony coś, co rejestruje czasy trwania żądań w kontrolerach MVC, może absolutnie być filtrem akcji.

juunas
źródło
3

Wykonywanie middlewarema miejsce, zanim kontekst MVC stanie się dostępny w potoku. Oznacza to, middlewareże na przykład nie ma dostępu do ActionExecutingContextlub ActionExecutedContextw przypadku ActionFilter. Masz dostęp do opcji HttpContext, która pozwoli Ci na wykonanie działań na żądanie, a także na odpowiedź. Ponieważ nie wystąpiło jeszcze powiązanie modelu, użycie oprogramowania pośredniczącego nie byłoby odpowiednie do uruchamiania funkcji walidacji lub modyfikowania wartości. Middlewarebędzie również działać na każde żądanie, niezależnie od tego, który kontroler lub akcja jest wywoływana.

Z drugiej strony filtersbędzie działać tylko na określonych akcjach i kontrolerach, chyba że zarejestrujesz filtr globalnie podczas uruchamiania. Ponieważ masz pełny dostęp do kontekstu, możesz również uzyskać dostęp do kontrolera i samej akcji.

Źródło i przykład: dotnetcultist.com

Majid Parvin
źródło