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?
asp.net-mvc
asp.net-core
Arvand
źródło
źródło
Odpowiedzi:
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. 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 .
źródło
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.
źródło
Wykonywanie
middleware
ma miejsce, zanim kontekst MVC stanie się dostępny w potoku. Oznacza to,middleware
że na przykład nie ma dostępu doActionExecutingContext
lubActionExecutedContext
w przypadku ActionFilter. Masz dostęp do opcjiHttpContext
, 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.Middleware
będzie również działać na każde żądanie, niezależnie od tego, który kontroler lub akcja jest wywoływana.Z drugiej strony
filters
bę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
źródło