2

我想创建一个匹配“/Users”的 MapRoute 条目,但不匹配“/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(如果重要的话)。

4

3 回答 3

2

您在 MVC 中指定路由的顺序是重要的部分 - 系统沿着 Routes 向下工作并找到它需要满足的第一个匹配项

因此,一般路线需要在列表的下方

在这种情况下,我们的顺序是

  • /用户/等/等
  • /用户/等
  • /用户(作为一个包罗万象)

希望这可以帮助?

有关路由的更多信息可以在这里找到http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

于 2011-01-24T13:58:14.750 回答
2

您可以使用一种IgnoreRoute方法来忽略路由,也许以下方法可以满足您的需要:

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

编辑: 并没有真正阅读太多关于 MVC 的约束,但它看起来像正则表达式?

你在更新中提到了你的约束\d+,这将只匹配数字,尝试\S+匹配所有空格,问题是,它也可能匹配反斜杠!

一个可能的替代方案是[a-zA-Z0-9]+

于 2011-01-24T13:59:18.077 回答
0

这是确切的解决方案:

只需替换参数中的和位置 ,id就可以了:actionurl

"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/Usersyourapp.com/Users/whatever

参考答案如何更改 MVC3 中 routes.MapRoute 的顺序?

于 2011-09-21T18:08:22.787 回答