2011-05-13 5 views
0

私は、ASP.NET MVCのルートマッチングの問題をデバッグしています。 URLは{foo}/Somewhere/{controller}/{action}/{id}のように定義されています。各セグメントにはルート上にデフォルト値が設定されています。ASP.MVCのデフォルトルート値マッチングの問題

http://hostname/bar/Somewhereを参照しようとすると、ルートが一致します。 http://hostname/Somewhereを試してみると(fooセグメントを除いて)、ルートは一致しません。

Phil Haackからroutedebuggerをインストールしましたが、デフォルト設定が正しく設定されていることがわかりましたが(コントローラ=ホーム、アクション=インデックス、id = UrlParameter.Optional、foo = bar)、ルートはまだ一致しません私は404を得ます。

「静的」セグメントの前に「optionnal」セグメントを持たないように経路を修正しようとしました:Somewhere/{controller}/{action}/{id}/{foo} 。このルートでは、url(http:// hostname/Somewhere/barとhttp://hostname/Somewhere)が期待どおりに動作しています。

MVCには、ハードコードされたものの前に "optionnal"セグメントを使用できないという制限(またはバグ)がありますか?あなたの助けのための

おかげで、 ファビアン

答えて

0

これが唯一の論理的です。 fooプレースホルダは突然空でも省略することもできません。あなたが私の意見を尋ねるなら、省略することは良いことではないと言わなければなりません。これらのルートは、サイズの小さい順に、アプリのモジュールと機能にマップする必要があります。

基本的には、thisという質問にも答えますが、ルートの途中にオプションのセグメントを置くことはできません。

+0

なぜ私は省略できないのか分かりませんが、私はデフォルト値を提供しています。 –

+0

これは、それがどのように設計されているのか、そして主にパフォーマンス上の理由からです。 – Aliostad

+0

あなたの答えをありがとう。 –