2012-06-24 168 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