Вопрос

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

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

Типичные примеры, которые я нашел в Интернете, основаны на примере

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

~/mycontroller/myaction/?foobar=123

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

public ActionResult MyAction(int? foobar)

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

Хотя вы все еще не можете использовать атрибут 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top