2012-06-24 61 views
0

我已经通知,StackOverflow上使用这个网址:ASP MVC路由

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

我怎么能这样的路由添加到ASP MVC(3或4)? 如果我想补充修订的数量像这样:

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

其转化为

  • 控制器=职位
  • 帖子ID = 123123
  • 子控制器=修订
  • 于RevisionId = 2

我的问题是我必须在高级中设置entier路由。 如果我能够设置帖子的路由并在特定的帖子资源和子资源之间添加路由,我们可以在任何返回帖子资源的路由之后添加/修改。

谢谢, 伊多。

回答

3

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

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

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

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

    posts/{postId}/revision/{revisionID} 
    

    ,从而允许而只有匹配非常 特定的URL格式这条路线在路由列表年初放置。

2

我不完全确定我已经理解了你,但我认为这就是你要做的。这将使您能够处理正常的帖子 URL路由,并附加可选的修订路由。

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 
); 

然后,在该路由的控制器动作,检查或是否任何子控制器于RevisionId参数都存在。

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