TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.76K subscribers
Post #793 1.55K
День шестьсот пятидесятый. #ЗаметкиНаПолях
Жизненный цикл запроса в
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/
More from @netdeveloperdiary
  1. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  2. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  3. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  4. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  5. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  6. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →