Как я могу создать запись 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?