2012-03-23 13 views
0

私はこのトピックですでに質問されているさまざまな質問を見てきました。私はそれをどのようにしたいのかを試してみるために時間を費やしましたが、うまくいけば、ここの誰かが私がギャップを埋めるのを助けることができます。RESTfulなASP.NET MVC3のルーティング

私は新しいサイトを作成しています。URL構造をよりリーズナブルにしたいと思っていました(私は最初のMVC3の作成でそれをやりたかったのですが、そのような実験はできませんでした)。ただし、異なるURLがすべて同じアクションを指していることは望ましくありません。コントローラのコードを簡潔かつ直観的に保つよう要求されたリソースごとに異なるアクションが必要です。ここで

は、私が撮影してるURL構造の例である:最初の二つのURLの私が記載されている

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

働いている:

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

私は現在、私のルートを設定している方法ですこのルート構造で正しく最初のURLは私のリスティングページに移動します。 idを指定すると、Numberアクションが発生し、特定のレコードの詳細を表示できます。 Comment URLが機能していません。

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

は、私が何をしないのです:

私は、第三URLのアクションは、次のように定義していますか?そして、将来のリソースのためにこれを簡単に設定することはできますか?

答えて

0

idパラメータをオプションにする必要がありました。

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

ケースルートの上にCaseCommentルートを配置してみてください。私はそう

/Case/123/Comment 

、MapRoutesが順番specficあると信じ

1

は、このように404ほとんどの特定のルートは、より一般的なルート上の場所であるべき投げ、あなたの

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

ルートを使用しています。

0

マッピングルートは特定の順序です。

MVCで安心してルーティングするために考慮する必要があることは、もともとSteve Hodgekissによって書かれたGitHubのRestfulRoutingというプロジェクトです。

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

何もない場合は、コードを見ることもあなたを助けるかもしれません。

これが役に立ちます。

関連する問題