Présentation du routage au sein des applications MVC

Louis-Guillaume MORAND (Traduction)

Dans ce tutoriel vous êtes introduit à une fonctionnalité importante de toute application MVC nommée le routing ASP.Net. Le module de routage ASP.NET est responsable du mapping les requêtes navigateur entrantes vers des actions contrôleur particulières. À la fin, vous comprendrez comment la table de routage standard lie les requêtes à des actions contrôleur. ♪

- Titre : Présentation du routage au sein des applications MVC

- Auteur : Louis-Guillaume MORAND (Traduction)

- Parution : 1 mai 2009

- Licence : Copyright ® 2009 Equipe dotnet. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Utiliser la table de route par défaut

- Conclusion

Traduction

Cet article est la traduction la plus fidèle possible de l'article original : ASP.NET MVC Routing Overview

Utiliser la table de route par défaut

Lorsque vous créez une nouvelle application MVC, l'application est déjà configurée pour utiliser le routage ASP.Net. Le routage ASP.Net est configuré à deux endroits.

Tout d'abord, le routage ASP.Net est activé dans votre fichier de configuration Web (web.config). Il y a quatre sections dans ce fichier de configuration qui sont en rapport avec le routage : la section system.web.httpModules, la section system.web.httpHandlers, la section system.webserver.modules, et la section system.webserver.handlers. Faites attention à ne pas supprimer ces sections, car sinon votre routage ne marcherait plus.

Deuxièmement, et plus important encore, une table de routage est créée dans le fichier d'application Global.asax. Le fichier Global.asax est un fichier spécial qui contient les gestionnaires d'évènements pour les évènements du cycle de vie des applications ASP.Net. La table de routage est créée lors de l'évènement Application_Start.

Voici le fichier Global.asax par défaut d'une application Asp.Net MVC.

Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801

public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

}

protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}

Lorsqu'une application MVC démarre pour la première fois, la méthode Application_Start() est appelée. Cette méthode, à son tour, appelle la méthode RegisterRoutes(). La méthode RegisterRoutes() créé alors la table de routage.

La table de routage par défaut ne contient qu'une seule route (nommée Default). La route par défaut lie le premier segment d'une URL au nom d'un contrôleur, le second segment de l'URL à une action contrôleur et le troisième paramètre à un paramètre nommé id.

Imaginez que vous entrez l'URL suivant dans la barre d'adresse de votre navigateur :
/Home/Index/3

La route Defaults lie cette URL aux paramètres suivants :
controller = Home
action = Index
id = 3

Lorsque vous demandez l'URL /Home/Index/3, le code suivant est exécuté:
HomeController.Index(3)

La route Default inclut des valeurs par défaut pour les trois paramètres. Si vous ne fournissez pas un contrôleur, alors la valeur par défaut sera prise à savoir Home. Pour l'action il s'agira d'Index et pour le paramètre Id, il s'agira d'une chaine vide.

Regardons quelques exemples pour voir comment la route Default lie des URL à des actions contrôleur. Imaginez que vous saisissiez l'adresse suivante dans votre navigateur :
/Home

À cause des paramètres par défaut de la route Default, saisir l'URL précédente causera l'appel de l'action Index du contrôleur HomeController.

HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
}
}

La classe HomeController précédente inclut une méthode Index() qui accepte un unique paramètre Id. L'URL /Home causera l'appel de cette méthode en passant une chaine vide au paramètre Id.

À cause de la façon dont le framework MVC invoque les actions contrôleur, l'URL /Home correspond également à la méthode Index() de la classe HomeController.

HomeController.cs (Index action with no parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}

La méthode Index() présentée juste avant n'accepte aucun paramètre. L'URL /Home aura pour effet d'appeler cette méthode. L'URL /Home/Index/3 appellera aussi cette méthode, le paramètre Id étant ignoré, tout simplement.

L'URL /Home correspond également à la méthode Index() de la casse HomeController suivante :

HomeController.cs (Index action with nullable parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int? id)
{
return View();
}
}
}

Dans le code précédent, la méthode Index() avec un paramètre de type entier. Mais parce que ce paramètre est de type nullable, la méthode Index() peut être appelée sans générer d'erreur.

Au contraire, appeler la méthode Index() (du code suivant) avec l'URL /Home causera une exception parce que le paramètre Id n'est pas nullable et sera donc manquant.

HomeController.cs (Index action with Id parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int id)
{
return View();
}
}
}

Si vous tentez d'invoquer cette méthode en omettant le paramètre, vous obtiendrez l'erreur suivante :

L'URL /Home/Index/3 marche, elle, correctement avec l'action Index(). La requête /Home/Index/3 entraine l'appel de la méthode Index() avec un paramètre Id ayant la valeur 3.

Conclusion

L'objectif de ce tutoriel était de fournir une brève introduction au routage ASP.Net. Nous avons examiné la table de routage par défaut que vous avez avec une nouvelle application ASP.Net MVC. Vous avez appris comment la route par défaut lie les URL aux actions des contrôleurs.