Czym jest Middleware?
Middleware to oprogramowanie składane w potoki aplikacji do obsługi żądań i odpowiedzi. Każdy element:
- Wybierz, czy przekazać żądanie kolejnemu komponentowi w potoku.
- Praca może być wykonywana przed i po wywołaniu kolejnego komponentu w potoku.
Delegati żądań są wykorzystywani do budowy potoku żądań, który obsługuje każde żądanie HTTP.
Delegaci żądań są konfigurowani za pomocą metod Run, Map i Use extension. Oddzielny delegat żądań może być określony w anonimowej metodzie inline (zwanej inline middleware) lub może być zdefiniowany w klasie umożliwiającej ponownego użytku. Te wielokrotnego użytku klasy i metody anonimizacji w linii są oprogramowaniem pośredniczym lub komponentami middleware. Każdy komponent middleware w przepływie żądań odpowiada za wywołanie kolejnego komponentu w potoku, a jeśli to stosowne, za zwarcie łącza.
Migracja modułów HTTP do middleware wyjaśnia różnicę między ASP.NET Core a potokami żądań w poprzednich wersjach (ASP.NET) oraz dostarcza więcej przykładów middleware.
Użyj IApplicationBuilder do stworzenia pipeline'u middleware
Proces żądań ASP.NET Core składa się z serii delegatów żądań, jak pokazano na poniższym rysunku (proces wykonania podąża za czarną strzałką):
Każdy delegat może wykonywać działania przed i po kolejnym delegacie. Delegat może również zdecydować, że nie przekazuje żądania kolejnemu delegatowi, co nazywa się zwarciem w potoku żądań. Zwarcie jest zwykle pożądane, ponieważ pozwala uniknąć niepotrzebnej pracy. Na przykład oprogramowanie pośrednicze plików statycznych może zwrócić żądanie pliku statycznego i zakłócić resztę potoku. Delegati zajmujący się obsługą wyjątków muszą być wywoływani wcześnie w potoku, aby mogli wyłapywać wyjątki w późniejszych potokach.
Najprostsze rozwiązanie to prawdopodobnie skonfigurowanie delegata ASP.NET aplikacji Core, który będzie obsługiwał wszystkie żądania. Ten scenariusz nie obejmuje faktycznego potoku żądań. Zamiast tego dla każdego żądania HTTP wywoływana jest anonimowa metoda.
Pierwsza aplikacja. Run delegate kończy pipeline.
Istnieje kod taki jak ten:
Dostęp przez przeglądarkę okazuje się, że rzeczywiście znajduje się w pierwszej aplikacji. Run kończy pipeline.
Możesz delegować wiele próśb za pomocą aplikacji. Użycie jest ze sobą powiązane. Następny parametr reprezentuje kolejnego delegata w potoku. (Pamiętaj, że możesz zakończyć pipeline, nie wywołując kolejnego parametru.) Zazwyczaj możesz wykonać działania przed i po następnej delegacji, jak pokazano w poniższym przykładzie:
Korzystanie z przeglądarki do dostępu do wyników takich jak:
Widać, że kolejność wykonania delegata żądania podąża za powyższym schematem przepływowym.
Nuta:
Po wysłaniu odpowiedzi do klienta, nie dzwoń dalej. Invoke。 Po rozpoczęciu odpowiedzi zmiany w HttpResponse wygenerują wyjątek. Na przykład ustawienie nagłówków odpowiedzi, kodów statusu itp. wygeneruje wyjątek. Napisz treść odpowiedzi po kolejnym połączeniu.
może skutkować naruszeniem umowy. Na przykład pisanie dłuższe niż długość treści opisana w objętości.
Formatowanie treści responsywne może być uszkodzone. Na przykład zapisz stopkę HTML do pliku CSS.
HttpResponse.HasStarted to przydatna wskazówka, która wskazuje, czy wysłano nagłówek odpowiedzi i/lub czy napisano treść tekstu.
Wbudowane oprogramowanie pośredniczące
ASP.NET Core zawiera następujące komponenty middleware:
| Middleware | opis | | Uwierzytelnianie | Wsparcie dla uwierzytelniania jest dostępne | | CORS | Konfiguruj współdzielenie zasobów między domenami | | Bufor odpowiedźowy | Wsparcie dla odpowiedzi pamięci podręcznej jest dostępne | | Kompresja odpowiedzi | Zapewnienie wsparcia dla kompresji odpowiedzi | | Routing | Definiuj i ogranicz routowanie żądań | | Sesja | Zapewnia zarządzanie sesjami użytkownika | | Pliki statyczne | Zapewnia wsparcie dla przeglądania plików statycznych i katalogów | | Przepisywanie oprogramowania pośredniczącego URL | Używany do przepisywania adresów URL i żądania wsparcia dla przekierowania |
|