Как я могу создать запись MapRoute в ASP.NET MVC, которая соответствует, только если нет дальнейшего пути? - PullRequest
2 голосов
/ 24 января 2011

Я хотел бы создать запись MapRoute, которая будет соответствовать "/ Users", но не будет совпадать с путями типа "/ Users / etc" или "/Users/etc/etc".

Iтакже должны совпадать с «Users / {id}» (где ID - это int) и «Users / Me» (которые работают нормально).У меня есть ограничение на ID (@ "\ d +").

Есть идеи, как мне поступить?

Если я использую следующее, оно соответствует всем вышеперечисленным:

routes.MapRoute(null, "Users", new { controller = "Users", action = "Index" });

Нужно ли использовать ограничение?Если да, то какое ограничение я должен использовать?

Я использую ASP.NET MVC 3 (если это имеет значение).

Ответы [ 3 ]

2 голосов
/ 24 января 2011

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

routes.IgnoreRoute("Users/{*pathInfo}");

редактирование: Не слишком много читали об ограничениях для MVC, но похоже на регулярное выражение?

Вы упомянули свое ограничение \d+ в своем обновлении, оно будет соответствовать только цифрам, попробуйте \S+, который будет соответствовать всем пробелам, проблема в том, что он может соответствовать и обратной косой черте!

Возможной альтернативой будет [a-zA-Z0-9]+

2 голосов
/ 24 января 2011

порядок, в котором вы указываете маршруты в MVC, является важной частью - система прокладывает путь вниз по Маршрутам и находит первое совпадение, которое ей необходимо, которое удовлетворяет

поэтому общие маршруты должны быть дальше вниз по списку

заказ в этом случае наш будет

  • / Users / и т.д. / и т.д.
  • / Пользователи / и т.д.
  • / Пользователи (как поймать всех)

надеюсь, это поможет?

Более подробная информация о маршрутизации может найти здесь http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

0 голосов
/ 21 сентября 2011

Вот точное решение:

Просто замените места id и action в url параметре, вы получите:

"Users/{action}/{id}" => "Users/{id}/{action}"

routes.MapRoute(
"Users",
"Users/{id}/{action}",
 new { controller = "Users", action = "Index", id = UrlParameter.Optional});

Даже с этим:

id = UrlParameter.Optional

вы можете иметь yourapp.com/Users или yourapp.com/Users/whatever

ссылающийся ответ Как сделатьЯ меняю порядок маршрутов. Карта в MVC3?

...