ASP.Net MVC:Итак, подождите… Параметр маршрута по умолчанию должен иметь имя id?

StackOverflow https://stackoverflow.com/questions/1004331

  •  05-07-2019
  •  | 
  •  

Вопрос

Была ли у кого-нибудь еще эта проблема?Должно быть, я делаю что-то не так.

Итак, я настраиваю маршрут для подобных ошибок:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

И зовет , как:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

И на контроллере:

public ActionResult Error(String error)

Просто, не так ли?Ну, когда это действительно выполняется, ошибка равна нулю, несмотря на то, что URL выглядит как:

/Общая/Ошибка/ThisIsTheError

Но параметр error в методе Error равен null.(И да, я пробовал другие слова)

Теперь, если я заменю все это словом "id", все заработает.

Глобальный.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

Перенаправление:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

Общий Контроллер:

public ActionResult Error(String id)

Является ли id обязательным словом для всех маршрутов, если у вас есть маршрут по умолчанию, принимающий значение?

Это было полезно?

Решение

Вам всегда нужно указать контроллер и параметры действия:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

Я предполагаю, что причина, по которой использование id работает для вас, заключается в том, что у вас все еще зарегистрирован маршрут по умолчанию, который имеет id в качестве параметра и значения по умолчанию для контроллера и действия.

Обратите внимание, если у вас все еще есть маршрут по умолчанию, обязательно добавьте свой маршрут до того , как это, в противном случае сначала оно будет соответствовать другому.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top