MVC 3 – Routing – Partie 1

Depuis peu je me suis plongé dans MVC 3. Habitué au Web forms classique en ASP.net j’ai été tout d’abord surpris par le pattern MVC, puis petit à petit je me suis rendu compte de la puissance de cette conception.

Commençons simplement sur le Routing, ce n’est pas vraiment spécifique à l’architecture MVC car cette technologie était déjà utilisée auparavant en Web Forms.

1) Initialisation de la solution de test

Tout d’abord nous avons besoin d’une solution pour tester tout ça, pour cela on va juste créer un solution MVC 3 Web Application comme ci-dessous, on va l’appelée TestMVCRouting.

Création solution MVC 3

Sur l’écran suivant il suffit de choisir Internet Application pour disposer d’une bonne base de départ.

2) Global.asax.cs

C’est dans ce fichier que tout va se passer, le code est exécuté au lancement de l’application pour la première fois. C’est plus précisément la méthode RegisterRoutes qui va nous intéresser. C’est en effet dans cette méthode que l’on va définir les différentes routes composant notre système.

Par défaut à la création du projet on se retrouve avec ceci :

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

A première vue on y comprend pas grand chose, c’est bien pour ça qu’on va tout supprimer et repartir de zéro.

Tout d’abord décomposons l’URL de base de notre application, celle appelant l’action Index de notre controller Home.

http://www.monsite.com/Home/Index

On y distingue déjà le classique WWW suivi de l’adresse de site web, jusqu’ici rien d’exceptionnel. Ensuite nous retrouvons Home, qui est le nom de notre controller crée en même temps que la solution, puis Index qui est l’action de base de notre controller. On en déduit une URL composée de deux segments qu’on pourraient dire dynamiques.

Le premier segment correspond au nom du controller, dans notre cas Home. Le deuxième segment correspond à l’action demandée dans notre controller, dans notre cas la méthode Index. Le pattern est donc http://www.monsite.com/{controller}/{action}.

Vu que nous avons tout supprimé dans la méthode RegisterRoutes on va écrire comme règle que toute URL ayant {Nom du contrôleur}/{Nom de l’action} est gérée. Pour ce faire, rien de plus simple car il suffit juste dans la méthode RegisterRoutes d’ajouter cette ligne de code :


 public static void RegisterRoutes(RouteCollection routes)
 {
    routes.MapRoute("Route 1", "{controller}/{action}");
 }

Désormais lançons l’application…ah tiens l’application plante. Effectivement si on regarde de plus près on ne gère que les URL’s avec deux parties, hors par défaut au lancement du site on appelle

localhost:numero_port

Cette URL ne comporte aucune partie et donc ne correspond au aucun pattern définit.

Si on fait le test en tapant directement dans la barre d’adresse :

localhost:numero_port/Home/Index

Miracle ça fonctionne parfaitement !

Dans un prochain article nous allons voir comment on peu “intercepter” ces appels à des URL’s que nous ne gérons pas.

Leave a Reply