2011-03-14 15 views
0

時にはコントローラに一致するようにルートが必要な場合もあります。ここでの例は次のとおり?デフォルトのコントローラ/アクションと同じASP.NET MVC動的ルート

/コントローラ/アクションID =試験 - これはデフォルト{コントローラ}/{アクション}ルート

/名前/タイプフラグ=試験である - これは私の習慣である{DbValueから}/{dbvalue} route

ご覧のとおり、2つのルートは同じです。しかし、{controller}または{action}が特定の値(DBに依存しているため実行時にのみ認識される)であれば - 他のルート(/ specificcontroller/handleall(文字列名、文字列型)アクション)と一致するルートが必要です。

可能ですか?

答えて

1

OK、答えはデフォルトルートで受け入れられた{controller}値からDB値を除外するためにIRouteConstraintを実装することです。

など。

routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new { controller = new ExcludeValuesConstraint("dbvalue1", "dbvalue2") } 
     ); 

もちろん、除外された値は動的でなければなりません。

私のルートに制約を追加するのではなく、デフォルトルートから値を除外するというトリックがありました。

0

これはまだテストされていないが、単にアイデア:

のGlobal.asax:

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

そのクラスRouteController内部メソッド・アクションIndex()に、あなたはdbValue1dbValue2をチェック。一致しない場合はRedirectToRoute("Default", ...)メソッドを使用できます。

この方法により、任意の要求がDbRouteRouteControllerと一致しますが一致しない場合は単にDefaultへのルートを転送及び/アクションコントローラに基づいてビューをレンダリングし、dB値をチェックします。

関連する問題