#c# #asp.net-mvc #asp.net-core #url #routes
Вопрос:
Я пытаюсь управлять настройками маршрутизации для своего проекта, но я не все понимаю, я хочу сделать некоторые действия или имена контроллеров необязательными в URL-адресе.
Например, у меня есть контроллер «HomeController» с действием «SignIn ()», я хочу, чтобы он был доступен по URL-адресу «/signin», а не «/home/signin».
То же самое для контроллера с именем «ProjectsController» с действием «Детали(идентификатор int)», я хочу, чтобы он был доступен с помощью «/проекты/348», а не «/проекты/детали/348».
Я не изменял конфигурацию конечной точки по умолчанию:
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Как я могу сделать имя некоторых контроллеров и имя действий необязательными ? И после этого смогу ли я по-прежнему использовать помощники тегов для ссылок с asp-контроллером и asp-действием ?
Ответ №1:
Я думаю, что вы должны использовать атрибуты маршрута. Например, для вашего действия по подписанию
public partial class HomeController : Controller
{
[Route("~/signin")]
public IActionResult SignIn()
{
.....
}
}
и используйте тот же шаблон для других специальных действий
и у вас тоже может быть несколько маршрутов для одного действия
[Route("~/signin")]
[Route("~/home/signin")]
public IActionResult SignIn()
{
.....
}
Комментарии:
1. Переопределяет ли атрибут маршрута конфигурацию конечной точки в файле startup.cs ?
2. атрибуты маршрута не влияют на конечные точки. Атрибуты маршрута имеют наивысший приоритет. Только если действие не имеет маршрутизированных атрибутов, используется маршрут конечных точек.