MVC Routing - вопрос об именах параметров - PullRequest
10 голосов
/ 05 декабря 2008

Я ищу некоторую информацию о маршрутизации в MVC с C #. В настоящее время я очень хорошо знаком с основами маршрутизации в MVC, но то, что я ищу, довольно сложно найти.

По сути, я хочу найти способ определения одного маршрута, который принимает один параметр.

Общие примеры, которые я нашел в Интернете, основаны на примере

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{id}"
    new { controller = "Default", action="Index", id=""});

При отображении этого маршрута вы можете сопоставить любое действие в любом контроллере, но если вы хотите передать что-либо в действие, параметр метода должен называться «id». Я хочу найти способ обойти это, если это возможно, чтобы мне не приходилось постоянно указывать маршруты, просто чтобы использовать другое имя параметра в моих действиях.

У кого-нибудь есть идеи, или нашли способ обойти это?

Ответы [ 5 ]

7 голосов
/ 13 марта 2013

Если вы хотите, чтобы другое имя параметра и оставляли одну и ту же переменную маршрутизации, используйте атрибут FromUri следующим образом:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
   // do stuff
}

В ваших маршрутах все, что вам нужно, это:

routes.MapRoute(
  "Default",
  "{controller}.mvc/{action}/{id}"
  new { controller = "Default", action="Index", id=""});
5 голосов
/ 06 декабря 2008

Я не думаю, что вы можете сделать именно то, что вы просите. Когда MVC вызывает действие, он ищет параметры в маршрутах, параметрах запроса и строке запроса. Он всегда ищет соответствие имени параметра.

Возможно, старая добрая строка запроса удовлетворит ваши потребности.

~/mycontroller/myaction/?foobar=123

передаст 123 этому действию:

public ActionResult MyAction(int? foobar)
3 голосов
/ 16 июня 2012

Я знаю, что это было столетия назад, но надеюсь, что это все еще кому-то помогает. Я задавал тот же вопрос раньше. Я думаю, это то, что вы ищете. Ответ процитирован из моего поста с вопросом: «Бит {* pathInfo} называется слагом. По сути, это подстановочный знак, говорящий« все, что после этой точки вставлено в параметр с именем pathInfo ». Таким образом, если у вас есть« {resource} .axd / {* pathInfo} »и URL например: http://blah/foo.axd/foo/bar/baz/bing, затем создаются два параметра, один называется ресурсом, который будет содержать foo, а другой - pathInfo, который содержит foo / bar / baz / bing. "

0 голосов
/ 13 апреля 2017

Хотя вы все еще не можете использовать атрибут FromUri, вы можете использовать атрибут Route, например

[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
  Policy.RemoveScheduledPriorAddressItem(sequence);
  return RedirectToAction("Information", new { id = Policy.Id });
}

Технически это добавляет новый маршрут, но, по крайней мере, он не загромождает ваш routeconfig. Он помещает определение маршрута туда, где он используется, что мне нравится (меньше охоты на вещи).

Помните, что для использования атрибутной маршрутизации это должно быть в вашем файле routeconfig выше ваших определенных маршрутов:

routes.MapMvcAttributeRoutes();
0 голосов
/ 05 декабря 2008

Вы можете строить маршруты так, как вам нравится

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}"
    new { controller = "Default", action="Index", param1="", param2="", param3=""});

Также, посмотрите на этот пост , он содержит все виды примеров в разделе комментариев

...