作为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的类型切换路由,或者解决此问题的其他方法?
答案 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},并且会落到第二条路线中,该条码应该可以正常使用该网址。