Я читал о жизненном цикле запроса в MVC. Я застрял в понимании следующей строки.
Модуль UrlRouting перехватывает запрос
Запрос - что такое UrlRoutingModule?
Я много искал в google, но не нашел полезных
Я читал о жизненном цикле запроса в MVC. Я застрял в понимании следующей строки.
Модуль UrlRouting перехватывает запрос
Запрос - что такое UrlRoutingModule?
Я много искал в google, но не нашел полезных
Запросы к веб-приложению на основе 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
.
Если вы посмотрите внутри 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 для текущего запроса.
Просто добавьте несколько деталей.
Как указано @ 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