路由取决于url中的可选操作值

时间:2009-07-06 14:07:33

标签: asp.net-mvc routing

作为ASP.MVC的新手我正在寻找以下路由问题的解决方案。

我希望这些Url能够显示所显示的页面:

/会员/ 123 / A +奇怪+用户名 - >页面与会员详细信息
/会员/ 123 - >如上所述 / Member / Connections / 123 - >页面与成员连接列表
/会员/连接/ 123 / A +奇怪+用户名 - >如上所述 /会员/评论/ 123 - >页面与成员评论列表
/会员/评论/ 123 / A +奇怪+用户名 - >如上所述

应忽略用户名,但会将其附加到链接以帮助搜索引擎。

我尝试过以下路线:

routes.MapRoute("MemberPage", "Member/{id}/{*name}", new { controller = "Member", action = "Details", id = "" });
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}", new { controller = "Member", action = "Details", id = "" });

但它似乎总是默认为第一个路由,然后出现错误,因为“Connections”或“Comments”是Details控制器的无效id。

是否有办法根据id-value的类型切换路由,或者解决此问题的其他方法?

1 个答案:

答案 0 :(得分:5)

如果您将路径约束添加到{id}两条路线,可能会有所帮助。

routes.MapRoute("MemberPage", "Member/{id}/{*name}",
      new { controller = "Member", action = "Details", id = "" },
      new { id=@"\d+" });
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}",
      new { controller = "Member", action = "Details", id = "" },
      new { id=@"\d+" });

通过这种方式,它不会尝试在第一条路线中将“评论”映射到{id},并且会落到第二条路线中,该条码应该可以正常使用该网址。