Необязательное значение для MVC Route в начале URL - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь заставить эти маршруты работать вместе, но я не уверен, как заставить это работать:

"{prcode}/{controller}/{action}/{id}"
"{controller}/{action}/{id}"

Идея на моих контроллерах заключается в том, что, если указан prcode, он будет использовать этот код продукта, в противном случае он будет использовать базу кода продукта на некоторой другой логике.

Но для других контроллеров, не заботящихся о prcode, следует просто игнорировать его.

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Вы можете добавить ограничение маршрута, чтобы ограничить возможные значения, допустимые для prcode. Если шаблон не соответствует данному запросу, он попробует второй маршрут.

Ограничения маршрута могут быть определены с помощью регулярного выражения, подобного этому:

routes.MapRoute(
    "Product",
    "{prcode}/{controller}/{action}/{id}",
    new { controller="Home", action="Index", id = UrlParameter.Optional },
    new { prcode = @"\d+" } // route constraint accepting only numbers for prcode
);

Если вам нужна более сложная логика или, возможно, некоторые значения из базы данных, вы можете создать собственное ограничение для достижения этой цели. Подробнее об этом здесь: http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx

0 голосов
/ 09 марта 2012

Это возможно, но вам нужно изменить способ объявления маршрута,

"{prcode}/{controller}/{action}/{id}"
"{controller}/{action}/{id}"

Так как prcode может иметь или не иметь значение (то есть «prcode является необязательным»), вы не можете объявить в качестве первого значения, оно должно быть похоже на

"{controller}/{action}/{prcode}"

и prcode можно пометить как UrlParameter.Optional

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...