Attribut-Routing in MVC 5
Vor MVC 5 konnten Sie URLs bestimmten Aktionen und Controllern routes.MapRoute(...)
zuordnen, indem Sie die Datei RouteConfig.cs aufrufen. Hier wird die URL für die Homepage gespeichert ( Home/Index
). Wenn Sie jedoch die Standardroute wie unten gezeigt ändern,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Beachten Sie, dass dies Auswirkungen auf die URLs anderer Aktionen und Controller hat. Wenn Sie beispielsweise eine Controller-Klasse mit dem Namen ExampleController
und eine darin enthaltene Aktionsmethode aufgerufen haben DoSomething
, wird die erwartete Standard-URL verwendetExampleController/DoSomething
funktioniert nicht mehr, da die Standardroute geändert wurde.
Eine Problemumgehung besteht darin, sich nicht mit der Standardroute herumzuschlagen und neue Routen in der Datei RouteConfig.cs für andere Aktionen und Controller wie diese zu erstellen.
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 }
);
Jetzt wird die DoSomething
Aktion der ExampleController
Klasse der URL zugeordnet hey/now
. Dies kann jedoch jedes Mal mühsam werden, wenn Sie Routen für verschiedene Aktionen definieren möchten. In MVC 5 können Sie jetzt Attribute hinzufügen, um URLs mit Aktionen wie diesen abzugleichen.
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();
}
}