2009-04-16 51 views
1

私は以下のようなURLを作成したいと思います:asp.net MVC URLルーティング - サブフォルダ名

発表、健康、政策コントローラです

私はこのように新しいURLルートマップを作成します:

routes.MapRoute(
"News", 
"news/{controller}/{action}/{id}", 
new { controller = "Announcement", action = "Index", id = "" } 
); 

これは、2つのURLを以下は、同じページを表示し、正常に動作しますが、:

私は2番目のURLを阻止したいと思います。

私は何をしますか?

おかげ クォン

答えて

10

あなたはまだ設定デフォルトルートを持っている場合は、あなたがそれを削除するか、それはあなたのニュースのパスに一致しないように、ルートの制約を追加する必要があります。

この削除:制約は(唯一のホームコントローラおよびその他に一致するようにデフォルトルートを許可しますが、ないアナウンス、健康、または方針ます

routes.MapRoute("Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = "" }, 
       new { controller = "(Home|Other)" }); 

routes.MapRoute("Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = "" }); 

または制約を追加しますそれについては何か他のもの)。

+0

最初のURLはカスタムルートで一致していますが、2番目のURLはデフォルトルートで一致しています。 –

+0

mvcフレームワークの「他の」予約キーワードですか? –

+0

@Graphain - それは私の疑いですが、コード全体を見ることなく知るのは難しいです。 – tvanfosson

1

デフォルトのルートマッピングがある場合は、それをマッピングの最後に移動します。それが助けにならない場合は、Url Routing Debuggerを試すことができます。

0

論理的に言えば、2番目のURLは機能しません。 ニュースはIISでホストされているアプリケーション名なので、既定のWebサイトに入れている可能性があります。だから、あなたがアクセスしている場合、アプリケーションのURLは、常に

http://localhost/ニュース /コントローラ/アクション

になりますし、あなたがこの

http://localhost/controller/actionを与えれば、それは見てどのアプリケーションを知っているdoesntの。

仮想ディレクトリ 'news'を作成してそこにすべてを公開していない場合は作成することをお勧めします。 また、Inetpub \ wwwroot \ディレクトリにアプリケーションファイルを公開していないことを確認してください。

ご返信をお待ちしています。