2012-03-23 58 views
0

我已經通過已經問關於這一主題的各種問題看,我已經花了時間,試圖得到它的工作我怎麼想它,但我還沒有多少運氣這麼希望這裏有人能幫我填補空白。REST風格的ASP.NET MVC3路由

隨着我創建一個新網站,我想嘗試讓URL結構更加RESTful(我想用我的第一個MVC3創作,但時間不允許這樣的實驗)。但是,我不希望不同的URL都指向相同的操作。我希望對每個請求的資源採取不同的操作,以使控制器代碼簡潔直觀。

這裏的URL結構,我拍攝了一個例子:

/Case //This currently works 
/Case/123 //This currently works 
/Case/123/Comment //This one does not work (404) 

這裏是我目前有我的路線設置:

routes.MapRoute(
    "Case", 
    "Case/{id}", 
    new { controller = "Case", action = "Number" } 
); 

routes.MapRoute(
    "CaseComment", 
    "Case/{caseId}/Comment/{id}", 
    new { controller = "Case", action = "CaseComment" } 
); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

列出的前兩個URL的我都工作正確使用此路線結構。第一個網址將我帶到我的列表頁面。當指定ID時,我點擊Number動作,以便我可以顯示該特定記錄的詳細信息。 Comment網址無效。

我已經第三URL的動作定義爲:

public ActionResult CaseComment(string caseId, string id) { 
    //Narr 
} 

我缺少什麼?而且,我能否以更簡單的方式爲未來的資源設置?

回答

0

我需要使ID參數可選。

routes.MapRoute(
    "Case Resources", 
    "Case/{caseId}/{action}/{id}", 
    new { controller = "Case", action = "CaseComment", id = UrlParameter.Optional } 
); 
1

相信MapRoutes是爲了specfic,所以

/Case/123/Comment 

正在使用您的

routes.MapRoute( 
    "Case", 
    "Case/{id}", 
    new { controller = "Case", action = "Number" }); 

路線,從而拋出一個404最具體的路徑應該是地方上面更一般的路線。

0

貼圖路線是訂單特定的。你不妨考慮在MVC寧靜路由

一件事是一個名爲RestfulRouting項目,是在GitHub上最初是由史蒂夫Hodgekiss寫的。

https://github.com/stevehodgkiss/restful-routing

如果不出意外,看代碼很可能幫助你。

希望這會有所幫助。