asp.net-mvc - 根据 url 中的可选操作值进行路由

标签 asp.net-mvc routes

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

我希望这些 URL 能够引导至显示的页面:

/Member/123/A+Strange+Username -> 包含成员(member)详细信息的页面
/Member/123 -> 如上所述
/Member/Connections/123 -> 包含成员连接列表的页面
/Member/Connections/123/A+Strange+Username -> 如上所述
/Member/Comments/123 -> 包含成员评论列表的页面
/Member/Comments/123/A+Strange+Username -> 如上所述

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

我尝试过以下路线:

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 = "" });

但它似乎总是默认为第一条路线,然后会收到错误,因为“连接”或“评论”对于详细信息 Controller 来说是无效的 ID。

有没有办法根据 id 值的类型切换路由,或者有其他方法来解决这个问题?

最佳答案

如果您向 {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},而是会转到第二个路由,该路由应该可以与该 URL 正常工作。

关于asp.net-mvc - 根据 url 中的可选操作值进行路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087175/

相关文章:

javascript - ng-view 不显示路线(angularjs)

Azure:公共(public) PaaS 可以通过 Express Route 连接到专用网络吗?

php - 在 Laravel 中添加 Sitemap 文件和路由

php - Laravel 路由和 Controller 测试

jquery - BlueImp 文件上传 "Error: Method Not Allowed"- Laravel 4 路由问题

asp.net-mvc - Fluent NHibernate 中的地理空间点映射

html - ASP.NET MVC 如何从数据库中包含 css

asp.net-mvc - ASP.net MVC RTM - "project type is not supported"

javascript - MVC Core,如何检索列表对象之一的索引

asp.net-mvc - 在MVC中上传动态创建具有权限的文件夹