Я переписываю вопрос, поскольку ответы на данный момент показывают мне, что я не определил его достаточно хорошо. Я оставлю исходный вопрос для справки ниже.
При настройке маршрутизации вы можете указать значения по умолчанию для разных частей URL / маршрута. Рассмотрим пример, который генерирует мастер VS:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
В этом примере, если контроллер не указан,
URL-адреса обычно выглядят так: http: // mysite / MyController / MyAction
.
Если в URL-адресе нет действий, подобных этому: http: // mysite / MyController
, тогда будет использоваться действие index.
Теперь предположим, что у меня есть два действия в моем контроллере Index и AnotherAction. Соответствующие им URL-адреса: http: // mysite / MyController
и http: // mysite / MyController / AnotherAction
соответственно. Мое действие «Индекс» принимает параметр id. Итак, если мне нужно передать параметр моему действию Index, я могу сделать это: http: // mysite / MyController / Index / 123
. Обратите внимание, что, в отличие от URL http: // mysite / MyController
, я должен явно указать действие Index. Я хочу передать http: // mysite / MyController / 123
вместо http: // mysite / MyController / Index / 123
. Мне не нужен "Индекс" в этом URL-адресе. Я хочу, чтобы механизм mvc распознал, что когда я запрашиваю http: // mysite / MyController / 123
, это 123 не является действием (потому что я не определил действие с этим именем), но параметр моего действия по умолчанию «Индекс». Как мне настроить маршрутизацию для достижения этой цели?
Ниже приводится исходная формулировка вопроса.
У меня есть контроллер с двумя методами, определенными следующим образом
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(SomeFormData data)
{
return View();
}
Это позволяет мне обрабатывать URL-адреса типа http: // website / Page
как когда пользователь переходит по этому URL (GET), так и когда он впоследствии отправляет форму обратно (POST).
Теперь, когда я обрабатываю сообщение обратно, в некоторых случаях я хочу перенаправить браузер на этот URL:
http://website/Page/123
Где 123 - некоторое целое число, и мне нужен метод для обработки этого URL в моем контроллере.
Как мне настроить маршрутизацию, чтобы это работало? В настоящее время у меня есть маршрутизация по умолчанию, сгенерированная мастером следующим образом:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Я попытался добавить другой метод контроллера, например этот:
public ActionResult Index(int id)
{
return View();
}
Но это не работает, так как генерируется исключение неоднозначного действия:
Текущий запрос на действие 'Индекс' на типе контроллера 'PageController' неоднозначно между следующими методы действия: System.Web.Mvc.ActionResult Index () в тип PageController System.Web.Mvc.ActionResult Индекс (Int32) по типу PageController
Я должен добавить, что у меня также есть другие действия в этом контроллере. Это сработало бы, если бы я этого не сделал.