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

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

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

Есть идеи, как мне это сделать?

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Просто замените места 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?

Другие вопросы по тегам