.NET MVC пользовательский маршрут другой контроллер по умолчанию - PullRequest
0 голосов
/ 05 ноября 2019

.NET MVC. У меня проблемы с определением и использованием пользовательских маршрутов. У меня есть контроллер всего с 2 действиями. Эти методы действия получают 2 параметра каждый. Я добавил собственный маршрут в RouteConfig.cs (перед маршрутом по умолчанию), например,

  routes.MapRoute(
     name: "customRoute",
     url: "MyController/{action}/{entityType}/{id}",
     defaults: new { controller = "MyController", action = "Index", entityType = UrlParameter.Optional, id = UrlParameter.Optional }
  );

, это работает, если MyController содержит метод Index (и соответствующее представление). проблема в том, что MyController не содержит метод Index (только 2 метода действия, упомянутых ранее), и Я хочу, чтобы route.default был чем-то вроде Home / Index вместо . но если я изменю маршрут на это:

  routes.MapRoute(
     name: "customRoute",
     url: "MyController/{action}/{entityType}/{id}",
     defaults: new { controller = "Home", action = "Index", entityType = UrlParameter.Optional, id = UrlParameter.Optional }
  );

, это не сработает. По-видимому, контроллер в route.url должен быть таким же, как и в route.defaults ...

ИСПРАВЛЕНИЕ : маршрут работает для правильного URL, но для неправильного (например, добавив еще один параметр в конце) он показывает ошибку 404 (имеет смысл, потому что MyController.Index не существует)

Итак, как этого можно достичь?

1 Ответ

0 голосов
/ 05 ноября 2019

url: "MyController/{action}/{entityType}/{id}"

Здесь вы говорите, что шаблон URL для вашего пользовательского маршрута должен начинаться с MyController (My /) . Если шаблон URL не совпадает с настроенными маршрутами (включая маршрут по умолчанию), у вас будет ошибка 404.

Я могу предложить 2 способа достижения желаемого ...

Либо создатьтретий метод в вашем MyController, который будет действовать как метод по умолчанию, и его задачей будет перенаправление на Home / Index.

Или

Создание нового метода в контроллере Home с параметрами для entityType и Id .

Вы не можете создать перегрузку для Home / Index, поскольку на контроллере может быть только максимум 2 метода действий с одинаковым именем.

См. Это.

Маршрутизация: текущий запрос на действие [...] неоднозначен между следующими методами действия

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