ASP.Net MVC:Итак, подождите… Параметр маршрута по умолчанию должен иметь имя id?
-
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 в качестве параметра и значения по умолчанию для контроллера и действия.
Обратите внимание, если у вас все еще есть маршрут по умолчанию, обязательно добавьте свой маршрут до того , как это, в противном случае сначала оно будет соответствовать другому.