【问题标题】:ASP MVC Routing of sub resources子资源的 ASP MVC 路由
【发布时间】:2012-06-24 07:21:12
【问题描述】:

我注意到 StackOverflow 使用了这个网址:

http://stackoverflow.com/posts/123123/revisions

如何将此类路由添加到 ASP MVC(3 或 4)? 如果我想像这样添加修订号怎么办:

http://stackoverflow.com/posts/123123/revisions/2

翻译成

  • 控制器=帖子
  • PostID=123123
  • SubController=修订版
  • 修订 ID=2

我的问题是我必须提前设置整个路由。 如果我能够设置帖子路由并将特定帖子资源之间的路由添加到称为修订的子资源,我也可以在返回帖子资源的任何路由之后添加 /revision。

谢谢你, 伊多。

【问题讨论】:

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


    【解决方案1】:

    这样的路线一开始很容易定义:

    {controller}/{postId}/{action}/{revisionID}
    

    但它很可能匹配太多。这可以通过两种方式缓解:

    • 使用约束将postIdrevision 限制为正整数(例如,正则表达式\d+)。
    • 硬编码controlleraction的名称:

      posts/{postId}/revision/{revisionID}
      

      因此允许将这条路线放在路线列表的前面,同时只匹配非常 特定的 URL 格式。

    【讨论】:

      【解决方案2】:

      我不完全确定我是否理解你,但我认为这就是你想要做的。这将使您能够处理普通的 Posts URL 路由,并附加一个可选的 Revisions 路由。

      routes.MapRoute(
          "RevisionsRoute",                               // Route name
          "posts/{PostID}/{SubController}/{RevisionID}",  // URL with parameters
          new { 
             controller = "posts", 
             action = "Index", 
             SubController = UrlParameter.Optional, 
             RevisionID = UrlParameter.Optional  
          }                                               // Parameter defaults
      );
      

      然后在此路由的控制器操作中,检查是否存在任何 SubControllerRevisionID 参数。

      public ActionResult Index(string SubController = null, int RevisionID = -1)
      {
          if (SubController != null)
          {
              if (SubController == "revisions")
              {
                  // handle revisions route
              }
          }
          else
          {
              // handle normal posts route
          }
      }
      

      这样用户就可以正常的发帖了:

      /posts/1
      

      或者以你想要的方式修改:

      /posts/1/revisions/2
      

      【讨论】:

        猜你喜欢
        • 2012-10-27
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多