2013-05-20 20 views
11

Czytałem o Żądaj cyklu życia w MVC. Utknąłem w zrozumieniu poniższej linii.ASP.NET MVC - co to jest UrlRoutingModule?

UrlRoutingModule przechwytuje Zapytanie

Zapytanie - Co jest UrlRoutingModule?

Szukałem dużo na google, ale nie mógł znaleźć żadnej użytecznej

Odpowiedz

19

Żądania aplikacji sieci Web opartej na ASP.NET MVC najpierw przechodzą przez obiekt UrlRoutingModule, który jest modułem HTTP. Moduł analizuje żądanie i dokonuje wyboru trasy. Obiekt UrlRoutingModule wybiera pierwszy obiekt trasy zgodny z bieżącym żądaniem. (Obiekt trasy jest klasą, która implementuje RouteBase i zazwyczaj jest instancją klasy Route.) Jeśli żadna z tras nie pasuje, obiekt UrlRoutingModule nic nie robi i pozwala, aby żądanie powróciło do zwykłego przetwarzania żądania ASP.NET lub IIS.

Z wybranego obiektu Route obiekt UrlRoutingModule uzyskuje obiekt implementujący interfejs IRouteHandler i powiązany z obiektem Route. Zazwyczaj w aplikacji MVC będzie to instancja klasy MvcRouteHandler. Instancja MvcRouteHandler tworzy obiekt MvcHandler, który implementuje interfejs IHttpHandler. Obiekt MvcHandler następnie wybiera kontroler, który ostatecznie obsłuży żądanie. Aby uzyskać więcej informacji, zobacz Routing ASP.NET.

Klasy UrlRoutingModule i MvcRouteHandler są punktami wejścia do środowiska ASP.NET MVC.Wykonują następujące czynności:

  • Wybierz odpowiedni kontroler w aplikacji internetowej MVC.

  • Uzyskaj konkretną instancję kontrolera.

  • Zadzwoń do metody kontrolera Execute.

Reference

+0

Czy istnieje jakaś różnica między UrlRoutingModule i Http Module? –

+1

@Amit: Jak powiedziałeś w pierwszym zdaniu ** Wnioski do aplikacji sieci Web opartej na MVC ASP.NET najpierw przechodzą przez obiekt UrlRoutingModule, który jest modułem HTTP. ** Czy istnieje jakaś różnica między UrlRoutingModule a modułem Http? –

+0

Moduł HTTP to ogólna koncepcja kodu, który jest wykonywany przez IIS podczas przetwarzania żądań. Jest to bardzo prosty opis, ale więcej nie pasuje do komentarza, jest dużo lektury na ten temat. W .Net jest klasą, która implementuje interfejs IHttpModule. System.Web.Routing.UrlRoutingModule to konkretna klasa implementująca moduł IHttpModule, co czyni go konkretnym modułem HTTP, co robi coś konkretnego. Istnieje wiele modułów HTTP w ASP.Net i każdy może tworzyć własne. – user3285954

2

Jeśli spojrzeć wewnątrz Global.asax w projekcie MVC, widać metodę zwaną RegisterRoutes. W ramach tego, zobaczysz „default” trasy ASP.NET MVC:

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

Trasa ta określa format żądania URL i jak to powinno być przypisane do kontrolera działania, czyli pierwszej części trasy identyfikuje kontroler, drugą część akcji itd. Możesz dodać do tego dodatkowe trasy, które umożliwiają pracę z adresami URL w różnych formatach.

UrlRoutingModule to po prostu klasa odpowiedzialna za przyjmowanie przychodzącego adresu URL żądania i dopasowanie go do jednej z tych tras, aby została wykonana prawidłowa czynność kontrolera.

Od MSDN:

Klasa UrlRoutingModule pasuje do żądania HTTP do trasy w aplikacji ASP.NET. Moduł przechodzi przez wszystkie trasy w właściwości RouteCollection i wyszukuje trasę z wzorcem URL, który odpowiada formatowi żądania HTTP. Gdy moduł znajdzie pasującą trasę, pobiera obiekt IRouteHandler dla tej trasy . Z modułu obsługi trasy moduł otrzymuje obiekt IHttpHandler i używa go jako procedury obsługi HTTP dla bieżącego żądania.

+0

Dzięki za pomoc. –

0

Wystarczy dodać kilka dodatkowych szczegółów.
Jak wspomniano przez @Ant P poniżej kod jest używany do rejestrowania ROUTE

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

Właściwie MapRoute jest Extension method kolekcji na trasach i wewnętrznie wdrożone jak poniżej.
Uwaga: To tylko pseudo kod zgodnie z moim rozumieniem.

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); 

GetHttpHandler() sposób MvcRouteHandler wraca wystąpienie MvcHttpHandler klasy, wewnątrz której obsługi kolejne żądanie.

Mam nadzieję, że pomoże to zrozumieć rolę UrlRoutingModule

Powiązane problemy