2011-06-18 10 views
1

サイトの動的URLをサイトの動的URLで定義しようとしています。私はそれのための適切なMVCルートを定義するいくつかの問題を抱えています。誰かが助けてくれますか? http://website.com/[dynamic-string]MVCルーティング:動的ルート値を取得しようとしています

をしかし、私はのような他の標準的なページがあります:

私の目的のURLは次のようになります。でも、ただhttp://website.comhttp://website.com/aboutまたはhttp://website.com/faqかを。

私のルートは、その動的文字列では正しく動作しません。以下に示すように。

これは動的文字列のルートです。

routes.MapRoute(
    "CommunityName", // Route name 
    "{communityName}", // URL with parameters 
    new { controller = "Community", action = "Community", communityName = UrlParameter.Optional } 
); 

これは私のルートがちょうど一致していない他のすべての標準ページ

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

ための経路です。最初に宣言されたルートに応じて、すべてがどちらか一方のルートに迂回されます。

答えて

1

あなたが言及する2つのルートの間に違いはありません。 MVCはどのURLをcommunityNameにマップするのか、どのURLをアクションにマッピングするのかをどのように知ることができますか?いずれのURLも両方に一致する可能性があります。

標準ページをルートとして(CommunityNameルートの前に)定義することも、コミュニティアクションでそれらをキャッチして、その名前がホームコントローラの機能と一致するかどうかを確認してから適切なアクション機能を呼び出すことができます。

これまではこれまでやったことはありませんが、あなたのコントローラーアクションを見て、アクションが本当に存在するかどうか、そして本当にそのルートを選択すればよりインテリジェントなルートハンドラーを作成できます。

1

これは有効であり、ルートは事実上同じです。アクションルートを宣言すると、ルートに制約はありません。そのため、何らかのアクション名が想定されます。

同じレベルで2つのルートをキャプチャする場合は、アクション名をコントローラに存在するものに制限する必要があります。一致しない場合は、次のルートに渡します。

あなたがここでの例と高度な制約を見ることができます:

http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Custom-route-constraint-to-validate-against-a-list.aspx

関連する問題