ASP.NET MVC - Qu'est-ce que UrlRoutingModule?

j'ai lu un article sur le cycle de vie des demandes dans MVC. J'ai été bloqué dans la compréhension de la ligne de sous-sol.

L'UrlRoutingModule intercepte la requête

requête-Qu'est-ce que UrlRoutingModule?

j'ai beaucoup cherché sur google mais ne pouvait pas trouver utile

12
demandé sur Kapol 2013-05-20 09:15:30

3 réponses

demandes à un ASP.NET L'application web MVC passe d'abord par le UrlRoutingModule object, qui est un module HTTP. Ce module analyse la demande et effectue la sélection d'itinéraire. UrlRoutingModule sélectionne le premier objet qui correspond à la demande actuelle. (Un objet route est une classe qui implémente RouteBase, et est typiquement une instance du Route classe.) Si aucun itinéraire de match, le UrlRoutingModule l'objet ne fait rien et laisse la requête retomber sur le normal ASP.NET ou demande IIS traitement.

à partir de L'objet Route sélectionné, le UrlRoutingModule objet obtient un objet qui implémente l' IRouteHandler interface et qui est associée à Route objet. Typiquement, dans une application MVC, ce sera une instance du MvcRouteHandler classe. MvcRouteHandler l'instance crée un MvcHandler objet qui implémente l' IHttpHandler interface. MvcHandler object sélectionne alors le contrôleur qui va finalement traiter la requête. Pour en savoir plus, consultez ASP.NET Routage.

UrlRoutingModule et MvcRouteHandler les classes sont les points d'entrée ASP.NET MVC framework. Ils exécutent les actions suivantes:

  • sélectionnez le contrôleur approprié dans une application web MVC.

  • obtenir une instance de controller spécifique.

  • Appel du contrôleur Execute méthode.

Référence

23
répondu Amit 2016-06-22 20:52:26

Si vous regardez à l'intérieur du Mondial.asax d'un projet MVC, vous verrez une méthode appelée RegisterRoutes. À l'intérieur de cela, vous verrez le "défaut" ASP.NET MVC route:

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

cette route spécifie le format de la requête URL et la façon dont celle-ci doit être mise en correspondance avec les actions du contrôleur, c'est-à-dire que la première partie de la route identifie le contrôleur, la seconde partie l'action, etc. Vous pouvez ajouter d'autres personnalisé routes vers ceci, ce qui vous permet de travailler avec des URLs différentes format.

UrlRoutingModule est simplement la classe qui est responsable de prendre L'URL de la requête entrante et de l'apparier à l'une de ces routes, donc l'action correcte du controller est exécutée.

MSDN:

la classe UrlRoutingModule fait correspondre une requête HTTP à une route dans un ASP.NET application. Le module itère à travers toutes les routes dans le La propriété RouteCollection et recherche une route qui a une URL motif que correspond au format de la requête HTTP. Lorsque le module trouve une route correspondante, il récupère L'objet IRouteHandler pour cela route. Du gestionnaire de route, le module reçoit un objet IHttpHandler et utilise cela comme gestionnaire HTTP pour la requête courante.

2
répondu Ant P 2013-05-20 07:35:04

juste pour ajouter quelques détails.

Comme indiqué par @Ant P ci-dessous le code est utilisé pour enregistrer la route

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

en fait MapRoute est un Extension method sur les Routes de collecte, et il mis en œuvre à l'interne comme ci-dessous.

Note: Ce n'est qu'un pseudo-code selon ma compréhension.

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's GetHttpHandler() renvoie une instance de MvcHttpHandler classe, qui traite en interne toute autre requête.

Espérons que cela aidera à comprendre le rôle de UrlRoutingModule

0
répondu user2243747 2014-02-23 10:52:07