2011-12-13 21 views
0

経路がコントローラを見つけられなかった後に、次の一致する経路を継続することは可能ですか?C#MVC経路障害後の経路を継続する

私はデータベースにビューを持っていますが、データベース内で一致するビューを探す前に実際のコントローラと一致するルートを持っていたいと思います。

私はこれらの経路を持っています。

 routes.MapRoute(
      "Default", 
      "{controller}/{action}" 
     ); 

     routes.MapRoute(
      "Content", 
      "{*route}", 
      new { controller = "Home", action = "Index" } 
     ); 

「デフォルト」ルートは、それが次のルート「コンテンツ」に続けることができ、コントローラ/アクションを見つけることに失敗した場合は?

乾杯、

リック。

+0

あなたのテストは何を示しましたか? – taylonr

答えて

0

MVCルーティングは、URLとルート値を一致させることで動作します。パターンが一致する限り、実際のコントローラ/アクションのペアがURLに一致するかどうかにかかわらず、そのルートを使用しようとします。これを行うには、コントローラアクション名を評価する何かをOnActionExecuteに入れ、データベースと一致しない場合はデフォルトルートのルートを無視します。私はあなたが一致させたいパターンである別のルートを追加し、デフォルトのルートではなくそのルートを使用し、リストの一番下にデフォルトルートを設定します。

+0

私は今朝それをいくつか追加しました。もし私がurl/test/testを持っていて、アクションテストでtestと呼ばれるコントローラがなければ、ルートはデータベースをチェックする次の行に落ちません。これを可能にするためにルーティングを変更する方法はありますか? –

+0

私はMVCソースを掘り下げて私が望むことをする方法を見つけましたが、{controller}/{action}をトラッキング/ {action}のような固定コントローラの部分に変更するだけで簡単だとわかりました。データベースをフォールスルーとして持ちます。 –

+0

はい。あなたは頭の上でそれを打つ。グローバルasax外のルートで作業することで、これを達成できます。基本的には、あなたのデータベースに一種のルックアップテーブルを持っていて、あなたのActionメソッドではビューのデータベースをチェックし、そこになければ名前でルートを呼び出します。あなたはデータベースチェックなしで名前付きルートと似た何かを達成することができるかもしれませんが、私は朝のコーヒーを持っていないので、私はまだすべてのシリンダーで発射していません:-) – Brian

関連する問題