Где происходит обработка HTTP-запросов в модели MVC?

«Где происходит обработка HTTP-запросов в модели MVC?» — вопрос из категории ASP.NET Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В архитектуре MVC фреймворка ASP.NET Core обработка HTTP-запросов происходит в контроллерах.

Как это работает:

  1. Маршрутизация (Routing): На основе URL и конфигурации маршрутов система выбирает соответствующий контроллер и действие (action method).
  2. Создание контроллера: Фреймворк создает экземпляр класса контроллера (обычно наследуемого от Controller).
  3. Выполнение действия: Вызывается метод действия, который:
    • Принимает параметры из запроса (из строки запроса, тела, заголовков).
    • Взаимодействует с моделью (бизнес-логикой, базой данных).
    • Подготавливает данные для представления.
  4. Возврат результата: Метод возвращает IActionResult (например, View(), Json(), Redirect()), который фреймворк преобразует в HTTP-ответ.

Пример простого контроллера:

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IProductRepository _repository;

    // Внедрение зависимостей через конструктор
    public HomeController(ILogger<HomeController> logger, IProductRepository repository)
    {
        _logger = logger;
        _repository = repository;
    }

    // Обработчик GET-запроса для пути "/" или "/Home/Index"
    public async Task<IActionResult> Index()
    {
        // Взаимодействие с моделью (получение данных)
        var featuredProducts = await _repository.GetFeaturedProductsAsync();
        // Передача данных в представление
        return View(featuredProducts);
    }
}

Ключевой момент: Контроллер выступает в роли координатора. Его задача — получить запрос, делегировать выполнение бизнес-логики сервисам (модели) и вернуть клиенту результат в нужном формате, не содержая в себе саму сложную логику.