MVC Routing - вопрос с именами параметров
Я ищу некоторую информацию о маршрутизации в MVC с помощью С#. В настоящее время я очень хорошо разбираюсь в основах маршрутизации в MVC, но то, что я ищу, довольно сложно найти.
Фактически, я хочу найти способ определения одного маршрута, который принимает один параметр.
Общие примеры, которые я нашел онлайн, основаны на примере
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
При сопоставлении этого маршрута вы можете сопоставить любое действие любого контроллера, но если вы хотите передать что-либо в действие, параметр метода должен быть назван "id". Я хочу найти способ обойти это, если это возможно, так что мне не нужно постоянно указывать маршруты, просто чтобы использовать другое имя параметра в моих действиях.
Есть ли у кого-нибудь какие-либо идеи или нашли способ обойти это?
Ответы
Ответ 1
Вы можете создавать маршруты по своему усмотрению
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{param1}/{param2}/{param3}"
new { controller = "Default", action="Index", param1="", param2="", param3=""});
Кроме того, посмотреть это сообщение, он содержит все образцы в разделе комментариев
Ответ 2
Если вы хотите иметь другое имя параметра и сохранить одну и ту же переменную маршрутизации, используйте атрибут FromUri следующим образом:
public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
// do stuff
}
В ваших маршрутах все, что вам нужно, это:
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
Ответ 3
Я не думаю, что вы можете делать именно то, что вы просите. Когда MVC вызывает действие, он ищет параметры в маршрутах, запрашивает параметры и строку запроса. Он всегда ищет соответствие имени параметра.
Возможно, хорошая старая строка запроса удовлетворит ваши потребности.
~/mycontroller/myaction/?foobar=123
передаст 123 этому действию:
public ActionResult MyAction(int? foobar)
Ответ 4
Я знаю, что это столетия назад, но надеюсь, что это все еще помогает кому-то. Я задал тот же вопрос раньше. Я думаю, что это то, что вы ищете. Ответ, процитированный из моего вопроса:
"Бит {* pathInfo} называется slug, в основном это подстановочный знак" все после того, как эта точка забита в параметр pathInfo ". Таким образом, если у вас есть" {resource}.axd/{* pathInfo} "и URL-адрес например: http://blah/foo.axd/foo/bar/baz/bing
затем создаются два параметра, один называется ресурсом, который будет содержать foo и один называется pathInfo, который содержит foo/bar/baz/bing."
Ответ 5
Хотя вы все еще не можете использовать атрибут FromUri
, вы можете использовать атрибут Route
, например
[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
Policy.RemoveScheduledPriorAddressItem(sequence);
return RedirectToAction("Information", new { id = Policy.Id });
}
Технически это добавляет новый маршрут, но по крайней мере он не загромождает ваш routeconfig
. Он ставит определение маршрута прямо там, где он используется, что мне нравится (менее охота на вещи).
Помните, что для использования маршрутизации атрибутов это должно быть в вашем файле routeeconfig выше ваших определенных маршрутах:
routes.MapMvcAttributeRoutes();