2009-04-29 15 views
0

私は多くの明示的なルートを定義します。そのうちの一つは次のとおりです。デフォルトおよびキャッチオールルートに関する問題

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

終わりに、私はキャッチオールルートを定義します。

routes.MapRoute("PageNotFound", "{*url}", 
    new { controller = "Error", action = "Http404" }); 

私はホームページhttp://localhostに行く場合は、http404ページが表示されます。そして不思議なことに、キャッチオールルートを削除すると、ウェルカムページが正しく表示されます。 また、Url.RouteUrl( "default")と呼ばれるメニューがあり、ホームページへのリンクが正しく生成されていることに注意してください。

なぜ、キャッチオールルートが存在するときに私のデフォルトルートがアクティブにならないのですか?

更新:routes.RouteExistingFiles = trueを使用しています。私はそれを削除する場合、それは期待どおりに動作します。しかし、私はそれが真実に設定される必要があります。ここで何が問題なの?

ありがとうございました。

答えて

0

"routes.RouteExistingFiles = true"を使用すると、既存の(物理的に存在する)ファイルを独自のものとしてルーティングすることを意味します。そのため、ルーティングはスキップされます。あなたのルートWebサイトにはおそらく "default.aspx"や "index.htm"などがあると思います。

RouteExistingFilesを有効にすると、これらのファイルはルーティング経由ではなく正常に実行されます。

あなたのキャッチオールルーティングがRouteExistingFilesをオーバーライドしていると思います。つまり、自動的にdefault.aspxを404キャッチオールにルーティングします。

0

それでもデフォルトルートを持っている場合(すなわち{コントローラ}/{アクション}/{ID})RegisterRoutesで()がトラップ意志通常MVC要求のフォーマットに一致するすべてのURL。

つまりキャッチオールルートは唯一の悪いURLインターセプトそれは通常の形式(を何とか/何とか/何とか/何とか)に適合しないことができるかどうか。

存在しないコントローラの場合、例外は従来のASP.NET処理で処理する必要があります。

このhere

0

はあなたがキャッチすべてのルートに制約を配置しようとしましたハンドリングの良い説明をTheresの?制約は、catch-allセグメントが0文字であってはならないことを伝えるべきです。

関連する問題