Добавление маршрута атрибута в контроллер добавляет параметр в URL-адрес - PullRequest
0 голосов
/ 19 июня 2020

Я хочу изменить URL-адрес, который будет обращаться к моему контроллеру, но когда я это сделаю, вместо получения controller / action / id я получаю controller / action? Id = ( номер идентификатора) в URL-адресе.

Я использую маршрутизацию по умолчанию в моем MVC. Net Core.

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });

На моем контроллере у меня [Route("DifferentName/{action=index}")] для маршрутизации атрибутов .

Я попытался добавить [Route("DifferentName/{action=index}/{id?}")]

, но получаю исключение «RoutePatternException: имя параметра маршрута 'id' появляется в шаблоне маршрута более одного раза».

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Эти атрибуты неверны согласно документации:

[Route("DifferentName/{action=index}/{id?}")]

[Route("DifferentName/{action=index}")]

Вот как это должно выглядеть для контроллера, когда мы хотим только измените его часть URL:

[Route("DifferentName/[action]")] [действие]

[действие] будет заменено вашим именем действия, когда ядро ​​asp. net будет разрешать URL-адреса.

Более подробную информацию о маршрутизации можно найти в документации

0 голосов
/ 21 июня 2020

но я получаю исключение «RoutePatternException: имя параметра маршрута 'id' встречается в шаблоне маршрута более одного раза.»

Я воспроизвел вашу ошибку. Мне нужно подтвердить вместе с вами, заключается ли причина вашей ошибки в добавлении атрибута Route к both controller and action.

Если да, то, как указано в исключении, вам не нужно указывать маршрут повторно.

Измените следующие параметры, чтобы реализовать URL-адрес вида 'Differentname/action/5':

    [Route("DifferentName/{action=index}")]
    public class ShowPdfController : Controller
    {
       
        public IActionResult Index()
        {
            return View();
        }

        [Route("{id?}")]
        public IActionResult Action(int id)
        {
            return View();
        }
   }

Затем вы можете увидеть результат теста этой настройки:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...