2013-05-20 3 views
11

Я читал о запросе жизненного цикла в MVC. Я застрял в понимании нижеприведенной линии.ASP.NET MVC - Что такое UrlRoutingModule?

UrlRoutingModule перехватывает запрос

запрос - Что такое UrlRoutingModule?

Я искал много на Google, но не удалось найти какой-либо полезной

ответ

19

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

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

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

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

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

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

Reference

+0

Есть ли разница между UrlRoutingModule и Http Module? –

+1

@Amit: Как вы сказали в первом предложении ** Запросы на веб-приложение на основе ASP.NET MVC сначала проходят через объект UrlRoutingModule, который является модулем HTTP. ** Есть ли разница между UrlRoutingModule и Http Module? –

+0

HTTP-модуль - это общая концепция некоторого кода, выполняемая IIS при обработке запросов. Это очень простое описание, но больше не вписывается в комментарий, есть много чтения по этой теме. В .Net - это класс, реализующий интерфейс IHttpModule. System.Web.Routing.UrlRoutingModule - это конкретный класс, реализующий IHttpModule, и это делает его конкретным HTTP-модулем, что-то конкретное. В ASP.Net есть много HTTP-модулей, и каждый может создавать свои собственные. – user3285954

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 для текущего запроса.

+0

Спасибо за помощь. –

0

Просто добавить несколько деталей.
Как упомянуто @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

Смежные вопросы