Routage d'attributs dans MVC 5
Avant MVC 5, vous pouviez mapper des URL à des actions et des contrôleurs spécifiques en appelant routes.MapRoute(...)
le fichier RouteConfig.cs. C'est là que l'url de la page d'accueil est stockée ( Home/Index
). Cependant, si vous modifiez l'itinéraire par défaut comme indiqué ci-dessous,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
gardez à l'esprit que cela affectera les URL d'autres actions et contrôleurs. Par exemple, si vous aviez une classe de contrôleur nommée ExampleController
et une méthode d'action à l'intérieur de celle-ci appelée DoSomething
, alors l'URL par défaut attendue ExampleController/DoSomething
ne fonctionnera plus car la route par défaut a été modifiée.
Une solution de contournement pour cela est de ne pas jouer avec la route par défaut et de créer de nouvelles routes dans le fichier RouteConfig.cs pour d'autres actions et contrôleurs comme ceci,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
Maintenant, l' DoSomething
action de la ExampleController
classe sera mappée à l'url hey/now
. Mais cela peut devenir fastidieux à faire chaque fois que vous souhaitez définir des itinéraires pour différentes actions. Ainsi, dans MVC 5, vous pouvez maintenant ajouter des attributs pour faire correspondre les URL aux actions comme ceci,
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}