Acheminement des attributs dans MVC 5
Avant MVC 5, vous pouviez associer des URL à des actions et des contrôleurs spécifiques en appelant routes.MapRoute(...)
dans le fichier RouteConfig.cs. C'est là que l'url de la page d'accueil est stockée ( Home/Index
). Cependant, si vous modifiez la route par défaut comme indiqué ci-dessous,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
n'oubliez pas que cela affectera les URL des 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 consiste à ne pas toucher à la route par défaut et à créer de nouvelles routes dans le fichier RouteConfig.cs pour d'autres actions et contrôleurs, comme suit,
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, le DoSomething
l'action de la ExampleController
sera mis en correspondance avec l'url hey/now
. Mais cela peut devenir fastidieux à faire à chaque fois que vous voulez définir des routes pour différentes actions. Ainsi, dans MVC 5, vous pouvez maintenant ajouter des attributs pour faire correspondre les urls aux actions, comme suit,
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();
}
}