Ответ вслух Middle ASP.NET Core спрашивают часто обновлено

Путь HTTP-запроса в ASP.NET Core

Вопрос

Расскажите, что происходит с HTTP-запросом от Kestrel до ответа контроллера.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Запрос принимает Kestrel, кроссплатформенный веб-сервер, часто за обратным прокси вроде nginx. Он разбирает HTTP и создаёт HttpContext.

Что должно прозвучать в ответе

  • Kestrel принимает соединение и создаёт HttpContext

  • Создаётся DI scope для запроса

  • Конвейер middleware: исключения, HTTPS, статика, маршрутизация, аутентификация, авторизация

  • Конечная точка: привязка модели, валидация, фильтры (для MVC)

  • Выполнение действия и сериализация результата

  • Ответ проходит middleware в обратном порядке, scope освобождается

Что могут спросить следом

  • Где бы вы поставили логирование времени запроса?
  • Чем фильтры MVC отличаются от middleware?

Разбор

Запрос принимает Kestrel, кроссплатформенный веб-сервер, часто за обратным прокси вроде nginx. Он разбирает HTTP и создаёт HttpContext. Для запроса создаётся DI-scope, из него будут браться scoped-сервисы, например DbContext.

Дальше контекст проходит конвейер middleware в порядке регистрации: обработчик исключений, HTTPS-редирект, статические файлы, маршрутизация, которая выбирает конечную точку, затем CORS, аутентификация и авторизация. Любой middleware может завершить запрос сам, не вызывая следующий.

На конечной точке работает привязка модели: параметры берутся из маршрута, строки запроса, тела. В MVC идёт валидация и цепочка фильтров: авторизации, ресурсов, действий, исключений и результатов. Действие возвращает результат, он сериализуется в ответ. Ответ проходит middleware обратно, а по завершении запроса scope освобождается вместе со всеми IDisposable-сервисами.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.