Я переписываю вопрос, поскольку ответы пока показывают мне, что я не определил его достаточно хорошо. Я оставлю исходный вопрос для справки ниже.
При настройке маршрутизации вы можете указать значения по умолчанию для разных частей URL/маршрута. Рассмотрим пример, который создает мастер VS:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
В этом примере, если контроллер не указан, будет использоваться DefaultPageController, и если действие не указано, будет использовано действие "Индекс" .
URL-адреса будут выглядеть следующим образом: http://mysite/MyController/MyAction
.
Если в Url нет такого действия: http://mysite/MyController
, тогда будет использоваться действие индекса.
Теперь предположим, что у меня есть два действия в моем контроллере Index и AnotherAction. Соответствующие им URL-адреса http://mysite/MyController
и http://mysite/MyController/AnotherAction
соответственно. Мое действие "Индекс" принимает параметр, id. Поэтому, если мне нужно передать параметр в действие индекса, я могу сделать это: http://mysite/MyController/Index/123
. Обратите внимание, что в отличие от URL http://mysite/MyController
, я должен явно указать действие индекса. То, что я хочу сделать, - это передать 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() on Тип PageController System.Web.Mvc.ActionResult Индекс (Int32) по типу PageController
Я должен добавить, что у меня также есть другие действия в этом контроллере. Это будет работать, если я этого не сделаю.