我想创建一个与"/Users“匹配的用户条目,但不匹配"/Users/etc”或"/Users/etc/etc“这样的路径。
我还必须匹配"Users/{ ID }“(其中ID是一个整数)和"Users/Me”(它们工作正常)。我对ID (@"\d+")有一个约束。
你知道我该怎么做吗?
如果我使用下面的代码,它会匹配上面的所有代码:
routes.MapRoute(null, "Users", new { controller = "Users", action = "Index" });
我需要使用约束吗?如果是这样,我应该使用什么约束?
我使用的是ASP.NET MVC3(如果重要的话)。
发布于 2011-01-24 13:59:18
有一个IgnoreRoute
方法可以用来忽略路由,也许下面的方法可以做你需要的事情:
routes.IgnoreRoute("Users/{*pathInfo}");
MVC编辑:并没有读到那么多关于的约束,但是它看起来像正则表达式?
你在更新中提到了你的\d+
约束,这将只匹配数字,试试\S+
,它将匹配所有的空格,问题是,它也可能匹配反斜杠!
一种可能的替代方案是[a-zA-Z0-9]+
发布于 2011-01-24 13:58:15
在MVC中指定路由的顺序是很重要的部分--系统沿着路由向下工作,并找到它需要满足的第一个匹配
因此,一般路由需要在列表中更靠下
这种情况下的顺序是
希望这能有所帮助?
有关路由的更多信息,请单击此处http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs
发布于 2011-09-21 18:08:23
以下是确切的解决方案:
只需在url
参数中替换id
和action
的位置,就可以了:
"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
https://stackoverflow.com/questions/4782778
复制相似问题