2012-01-26 15 views
1

デフォルトのMVCは、このようにルートを作成するように私は、カスタムルートを作成したい:MVC 3カスタムのURLルーティング

domain.com/deals/detail/5

が、私の場合は、作成したいですそのためのカスタムルート:

それにid値5を渡して取引コントローラの詳細アクションを探すために持っているので、

をdomain.com/delicious-food-in-paris。

どうすればいいですか?

おかげ

+0

非常に多くのアプリケーションは、ハイブリッドアプローチを使用して、名前と、このようなURLのidを含めます価値5はどこから来るべきですか?サンプルURLには「5」はありません! – Jan

+0

私はおそらくIDの名前を探すことができます、私はパラメータとして取引名を渡すことができます。 – mehmetserif

答えて

1

このルートは取引コントローラの詳細メソッドにすべての1つのセグメントのURLをマップし、それにdealNameと呼ばれる1つの文字列引数を渡す:

routes.MapRoute(
     null, 
     "{dealName}", 
     new { controller = "deals", action = "detail" }    
    ); 

しかしAdamDが言ってきたように、あなたが最後のように、そのルートを登録する必要があります1つのセグメントしか持たないすべてのURLを捕捉するので、あなたの設定では経路が決まります。

このアプローチでは、受け入れられない可能性のある名前で取引を検索する必要があります。そして、あなたがIDを取得し、名前を任意に、このようなルートを使用することができます

​​

routes.MapRoute(
     null, 
     "{id}-{dealName}", 
     new { 
      controller = "deals", 
      action = "detail", 
      dealName = UrlParameter.Optional 
     } 
    ); 
0

あなたは、Global.asaxのRegisterRoutes機能にカスタムルートを定義することによってこれを行うことができます。このルートをデフォルトルートの後に追加する必要があります。そのため、デフォルトのコントローラアクションIDパターンが失敗した場合、最終ルートを実行しようとします。

例は、以下を使用することです:

 routes.MapRoute(
      "RouteName", 
      "/{uri}", //this is www.domain.com/{uri} 
      new { controller = "Controller", action = "ByUri" }, 
      new { uri = @"[a-z\-0-9]+" } //parameter regex can be tailored here 
     ); 

あなたはこれらのルートを処理する新しいカスタムコントローラを追加することができ、このルートを登録した後、これを処理し、として文字列を受け入れるアクションを追加しますパラメータ。

この新しいアクションでは、データベースの参照や、ビューを返すハードコードされたvalideルートを作成できます。