Asp.net основной MVC делает действие необязательным при маршрутизации

#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. атрибуты маршрута не влияют на конечные точки. Атрибуты маршрута имеют наивысший приоритет. Только если действие не имеет маршрутизированных атрибутов, используется маршрут конечных точек.