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