День шестьсот пятидесятый. #ЗаметкиНаПолях
Жизненный цикл запроса в ASP.NET Core MVC 3. Продолжение
Начало
Промежуточное ПО (Middleware)
Промежуточное ПО - это набор компонентов, которые образуют конвейер запросов уровня приложения. Эти компоненты отвечают за обработку входящих запросов и генерацию соответствующего ответа либо напрямую, либо с помощью инфраструктуры, такой как MVC. Промежуточное ПО обеспечивает все виды базовой инфраструктуры: маршрутизация, сессии, CORS, аутентификация, кеширование и т.п. Общие функции, которые применяются в различных приложениях, часто являются хорошими кандидатами для промежуточного ПО. Конвейер запросов .NET Core может иметь переменное количество компонентов промежуточного ПО.
Каждый модуль промежуточного ПО может воздействовать на запрос по мере его прохождения по конвейеру, а затем воздействовать снова при отправке сгенерированного ответа. Можно добавить сколько угодно компонентов промежуточного ПО, но важен порядок их регистрации.
Компоненты промежуточного ПО могут выбрать один из трёх методов обработки запроса:
1. Сгенерировать ответ (метод Run)
В этом случае конвейер запроса прерывается, ответ возвращается пользователю, а компоненты промежуточного ПО, зарегистрированные после текущего, не выполняются. Например, промежуточное ПО статических файлов возвращает содержимое файла сразу в ответ.
2. Воздействовать на запрос и передать его дальше (метод Use)
Промежуточное ПО выполняет некоторую работу (или не выполняет никакой) и передаёт запрос следующему зарегистрированному промежуточному ПО. Например, добавление записи о запросе в лог.
3. Перенаправить запрос (метод Map)
Это разновидность условного оператора в конвейере запросов. В зависимости запрошенного URL, может выполняться то или иное действие.
На картинке ниже представлена схема конвейера промежуточного ПО.
При старте приложения в классах Program.cs и Startup.cs происходит построение конвейера для обработки входящих запросов. Для примера предположим, у нас есть промежуточное ПО
- обслуживания статических файлов,
- маршрутизации,
- авторизации.
В .NET Core 3 маршрутизация разделена на два компонента:
- промежуточное ПО маршрутизации конечных точек (Endpoint Routing Middleware), которое решает, какая из зарегистрированных конечных точек должна обрабатывать запрос.
- промежуточное ПО конечных точек (Endpoint Middleware), которое выполняет конечную точку (передаёт запрос в среду MVC).
Между ними расположено промежуточное ПО авторизации, которое решает, должен ли пользователь быть авторизован для выполнения этой выбранной конечной точки. Если пользователь авторизован, запрос пересылается промежуточному ПО конечной точки.
MVC генерирует ответ определённого типа, например представление или JSON. Затем все компоненты промежуточного ПО могут, при желании, выполнить код в обратном порядке, когда ответ отправляется обратно в браузер, хотя большинство из них на этом этапе просто пропускают ответ дальше. Этот процесс выполняется для каждого запроса.
Продолжение следует…
Источник: https://app.pluralsight.com/library/courses/aspnet-core-3-mvc-request-life-cycle/
Post #793
1.55K