Маршрутизация атрибута в MVC 5
До MVC 5 вы могли сопоставлять URL-адреса с конкретными действиями и контроллерами, вызывая routes.MapRoute(...)
в файле RouteConfig.cs. Здесь хранится URL-адрес домашней страницы (Home/Index
). Однако если вы измените маршрут по умолчанию, как показано ниже,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Имейте в виду, что это повлияет на URL-адреса других действий и контроллеров. Например, если у вас был класс контроллера с именем ExampleController
и метод действия внутри него с именем DoSomething
, то ожидаемый URL-адрес по умолчанию ExampleController/DoSomething
больше не будет работать, поскольку маршрут по умолчанию был изменен.
Обходной путь для этого - не связываться с маршрутом по умолчанию и создавать новые маршруты в файле RouteConfig.cs для других действий и контроллеров, например,
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 }
);
Теперь действие DoSomething
класса ExampleController
будет сопоставлено с URL hey/now
. Но это может быть утомительно, если вы хотите определить маршруты для различных действий. Таким образом, в MVC 5 теперь можно добавлять атрибуты для сопоставления URL-адресов с действиями, например:
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();
}
}