MVC 3 – Routing – Partie 2

2e partie de cette petite saga consacré au routing avec le pattern MVC 3.

Dans la 1ere partie nous avions crée une solution de base pour expliquer comment s’écrivait une règle de routage. Nous avons vu que l’URL de base de notre site nous ramenait sur une erreur 404. Comme ceci n’est pas tout à fait ce que l’on souhaite nous allons ajouter les valeurs par défaut à nos règles de routage.

1) Valeur par défaut

L’objectif est que toute URL tapée dans la barre d’adresse du navigateur qui contiendrait zéro, une ou deux parties n’entraîne pas une erreur 404. Il est possible dans la déclaration des règles de routage d’ajouter les valeurs par défaut de nos paramètres. Cette petite plomberie se fait au travers d’un type anonyme comme dans l’exemple suivante :

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

Attention il faut que les propriétés de notre type anonyme soit nommées exactement de la même manière que les parties du pattern de la route (cad controller et action dans notre exemple). A noter également que le nom de propriétés n’est pas sensible à la casse.

Si dans la barre d’adresse nous n’avons que localhost alors automatiquement c’est la méthode Index du controller Home qui sera renvoyée. Tout comme si nous n’avions renseigné que localhost/Home alors nous serions servi avec la méthode Index également. Rien de plus simple pour tester il suffit de lancer l’application !

Maintenant dans le cas où l’utilisateur entrerait localhost/Home/Index/Autre alors là effectivement on se retrouve sur la fameuse erreur 404. C’est logique, car cette adresse contient trois parties, hors notre pattern définit dans les routes n’adresse que les URL avec 0,1 ou 2 parties.

2) Valeur statique

Rien n’empêche bien entendu d’inclure des valeurs dites statique dans nos URL’s, personnellement j’aimerai que toutes mes URL’s soit du type www.monsite.com/Blog/[Controleur]/[Action]. C’est tout simple, en modifiant le code comme ci-dessous ça fonctionne :

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

Oui mais me direz vous maintenant si je lance l’application mon URL de base (localhost) claque une erreur. Effectivement car elle ne répond plus au pattern définit vu qu’elle ne contient pas Blog. Si on tape localhost/Blog/ alors là effectivement grâce au mécanisme des valeurs par défaut que nous avons spécifiées on se retrouve bien avec le résultat de la méthode Index du controller Home.

Nous verrons dans le prochain article comment régler tout ça plus finement.

Leave a Reply