Routing atrybutów w MVC 5
Przed MVC 5 można było mapować adresy URL do określonych akcji i kontrolerów, wywołując routes.MapRoute(...)
plik RouteConfig.cs. Tutaj jest przechowywany adres URL strony głównej ( Home/Index
). Jeśli jednak zmodyfikujesz trasę domyślną, jak pokazano poniżej,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
pamiętaj, że wpłynie to na adresy URL innych akcji i kontrolerów. Na przykład, jeśli masz nazwaną klasę kontrolera ExampleController
i wywołano w niej metodę akcji DoSomething
, oczekiwany domyślny adres URL ExampleController/DoSomething
nie będzie już działać, ponieważ domyślna trasa została zmieniona.
Obejściem tego problemu jest uniknięcie bałaganu z domyślną trasą i utworzenie nowych tras w pliku RouteConfig.cs dla innych akcji i kontrolerów, takich jak ten,
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 }
);
Teraz DoSomething
akcja ExampleController
klasy zostanie odwzorowana na adres URL hey/now
. Ale może to być nudne za każdym razem, gdy chcesz zdefiniować trasy dla różnych działań. Tak więc w MVC 5 możesz teraz dodawać atrybuty, aby dopasować adresy URL do takich działań,
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();
}
}