Пользовательская маршрутизация .NET MVC
-
06-07-2019 - |
Вопрос
Мне было интересно, могу ли я создать карту маршрутизации с еще одним более высоким уровнем, чем контроллер.Типичная маршрутизация будет включать "/controller /action /id".То, что я ищу, это что-то вроде "раздел / контроллер / действие / идентификатор" или "контроллер / раздел / действие / идентификатор".Как я могу это сделать?
Решение
Никаких проблем.Просто создайте маршрут, URL-адрес которого, например
path/to/my/application/{controller}/{action}/{id}
... и укажите контроллер и действие по умолчанию, как обычно.
Конкретным примером этого является
context.MapRoute(
"Admin_default",
"admin/{controller}/{action}/{id}",
new { controller = "AdminHome", action = "Index", id = "" }
);
Это сопоставит, например, следующие URL-адреса:
/admin/ => AdminHomeController.Index
/admin/adminhome/ => AdminHomeController.Index
/admin/other/ => OtherController.Index
/admin/statistics/view/50 => StatisticsController.View(50)
Однако обратите внимание, что если у вас также есть маршрут по умолчанию, например, такой:
context.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
...тогда методы действия контроллера в маршрутизации администратора также могут быть доступны по этому маршруту.Используйте Отладчик маршрутизации URL-адресов чтобы выяснить это наверняка.