Подтвердить что ты не робот

ASP.NET MVC - Что такое UrlRoutingModule?

Я читал о жизненном цикле запроса в MVC. Я застрял в понимании следующей строки.

Модуль UrlRouting перехватывает запрос

Запрос - что такое UrlRoutingModule?

Я много искал в google, но не нашел полезных

4b9b3361

Ответ 1

Запросы к веб-приложению на основе ASP.NET MVC сначала проходят через объект UrlRoutingModule, который является модулем HTTP. Этот модуль анализирует запрос и выполняет выбор маршрута. Объект UrlRoutingModule выбирает первый объект маршрута, соответствующий текущему запросу. (Объект маршрута - это класс, который реализует RouteBase и обычно является экземпляром класса Route.) Если никакие маршруты не совпадают, объект UrlRoutingModule ничего не делает и позволяет запросу вернуться к обычной ASP.NET или обработки запросов IIS.

Из выбранного объекта Route объект UrlRoutingModule получает объект, реализующий интерфейс IRouteHandler и связанный с объектом Route. Как правило, в приложении MVC это будет экземпляр класса MvcRouteHandler. Экземпляр MvcRouteHandler создает объект MvcHandler, реализующий интерфейс IHttpHandler. Объект MvcHandler затем выбирает контроллер, который в конечном счете обрабатывает запрос. Дополнительные сведения см. В разделе Маршрутизация ASP.NET.

Классы UrlRoutingModule и MvcRouteHandler являются точками входа в структуру ASP.NET MVC. Они выполняют следующие действия:

  • Выберите подходящий контроллер в веб-приложении MVC.

  • Получить конкретный экземпляр контроллера.

  • Вызвать метод контроллера Execute.

Ссылка

Ответ 2

Если вы посмотрите внутри Global.asax проекта MVC, вы увидите метод под названием RegisterRoutes. В этом случае вы увидите маршрут по умолчанию ASP.NET MVC:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Этот маршрут указывает формат запроса URL-адреса и способ его сопоставления с действиями контроллера, то есть первая часть маршрута определяет контроллер, вторую часть действия и т.д. К этому можно добавить дополнительные пользовательские маршруты, который позволяет работать с URL-адресами в разных форматах.

UrlRoutingModule - это просто класс, отвечающий за прием URL-адреса входящего запроса и сопоставление его с одним из этих маршрутов, поэтому выполняется правильное действие контроллера.

Из MSDN:

Класс UrlRoutingModule соответствует HTTP-запросу на маршрут в Приложение ASP.NET. Модуль выполняет итерацию по всем маршрутам в Свойство RouteCollection и поиск маршрута с URL-адресом шаблон, соответствующий формату HTTP-запроса. Когда модуль находит соответствующий маршрут, он извлекает объект IRouteHandler для этого маршрут. От обработчика маршрута модуль получает объект IHttpHandler и использует это как обработчик HTTP для текущего запроса.

Ответ 3

Просто добавьте несколько деталей.
Как указано @ Ant P ниже кода используется для регистрации маршрута

    routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Фактически MapRoute является Extension method в коллекции маршрутов, и он выполняется внутри, как показано ниже.
Примечание. Его просто псевдокод в моем понимании.

var url = "{controller}/{action}/{id}";

        var defaults = new RouteValueDictionary();
        defaults.Add("controller", "Home");
        defaults.Add("action", "Index");
        defaults.Add("id", UrlParameter.Optional);

        var routeHandler = new MvcRouteHandler();

        var Default = new Route(url,defaults,routeHandler);

        routes.Add(Default);

Метод MvcRouteHandler GetHttpHandler() возвращает экземпляр класса MvcHttpHandler, который внутренне обрабатывает дальнейший запрос.

Надеюсь, что это поможет понять роль UrlRoutingModule