.Net MVC Route仅限ID

时间:2014-01-17 03:07:12

标签: asp.net-mvc asp.net-mvc-routing

我正在尝试配置我的路由,以便我可以将博客条目(带有字符串ID)作为网址中的唯一段。

例如,

/ ABlogTitle - > Controller =“Blog”,Action =“Entry”,Id =“ABlogTitle”

我的假设是,如果某条路由因行动不存在而失败,它将使用下一条路线重试,但这似乎不起作用。

这是我的路线......

routes.MapRoute(
    name: "Entries",
    url: "{id}",
    defaults: new {controller = "Blog", action = "Entry"}
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Blog", action = "Index", id = UrlParameter.Optional }
);

2 个答案:

答案 0 :(得分:1)

不,你的假设不正确。当请求匹配路由时,MVC不会遍历集合中的其余路由。

在这种情况下,请求/ABlogTitle与集合中的第一条路线匹配,不再进行路径探测,并且管道的其余部分(控制器选择,动作选择等)也会发生。

答案 1 :(得分:0)

您需要使用类似正则表达式的RouteContraint来限制匹配或使用像/ entry / {id}这样的前缀。

否则,是的,您为“条目”设置的路线将匹配每个网址。

http://www.dotnet-tricks.com/Tutorial/mvc/KIWF010113-Route-Constraints-in-Asp.Net-MVC-with-example.html

或者查看最新MVC和Web API版本中提供的新路由:

http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx