Маршрутизация атрибутов в 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();
}
}