【问题标题】:Routing depending on optional action value in url路由取决于 url 中的可选操作值
【发布时间】:2009-07-06 14:07:32
【问题描述】:

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

我希望这些 Url 指向显示的页面:

/Member/123/A+Strange+Username -> 包含成员详细信息的页面
/Member/123 -> 同上
/Member/Connections/123 -> 包含成员连接列表的页面
/Member/Connections/123/A+Strange+Username -> 同上
/Member/Comments/123 -> 包含成员 cmets 列表的页面
/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 = "" });

但它似乎总是默认为第一个路由,然后由于“连接”或“评论”对于详细信息控制器来说是无效的 id 而出现错误。

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

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

    如果您在两个路由的 {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 正常工作的第二个路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2013-07-16
      • 2013-12-21
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多