Instradamento degli attributi in MVC 5
Prima di MVC 5, era possibile mappare gli URL ad azioni e controller specifici chiamando routes.MapRoute(...)
il file RouteConfig.cs. Qui è dove viene memorizzato l'URL della home page ( Home/Index
). Tuttavia, se modifichi il percorso predefinito come mostrato di seguito,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
tieni presente che ciò influenzerà gli URL di altre azioni e controller. Ad esempio, se avevi una classe controller denominata ExampleController
e un metodo di azione al suo interno chiamato DoSomething
, l'URL predefinito previsto ExampleController/DoSomething
non funzionerà più perché la route predefinita è stata modificata.
Una soluzione alternativa per questo è non interferire con la rotta predefinita e creare nuove rotte nel file RouteConfig.cs per altre azioni e controller in questo modo,
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 }
);
Ora l' DoSomething
azione della ExampleController
classe verrà mappata all'URL hey/now
. Ma questo può diventare noioso ogni volta che desideri definire percorsi per azioni diverse. Quindi in MVC 5 ora puoi aggiungere attributi per abbinare gli URL ad azioni in questo modo,
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();
}
}