2011-01-02 14 views
1

私はMVCのデフォルトルーティングを有効にしたいと思っています。MVCは404を処理し、デフォルトのエラーページを設定します

私はDefaultController DefaultRout(にリダイレクトするためにあらゆる404のリクエストをしたい)

私はHow can i make a catch all route to handle '404 page not found' queries for ASP.NET MVC?

が、私は404を取得し、デフォルトのページへのリダイレクトはないよ{* URL} dosen'tの仕事を見つけました。

マイコード:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
    routes.IgnoreRoute("{resource}.ascx/{*pathInfo}"); 
    routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); 
    routes.IgnoreRoute("{resource}.gif/{*pathInfo}"); 

    //http://localhost:4775/BW/A/Tasks 
    routes.MapRoute("Pages", "A/{controller}", new { controller = "Tasks", action = "InitPage" }); 

    routes.MapRoute(
    "404-PageNotFound", 
    "{*url}", 
    new { controller = "Default", action = "DefaultRout" } 
); 
} 

私は何をしないのですか?

おかげ

ラファエル

+0

コントローラーとアクションは、それぞれ「Default」と「DefaultRout」ではなく、実際のコントローラーとアクションを指し示す必要があります。 –

+0

ちょうどその@ダンにピギーバック私の答えはあなたが 'defaultroute'メソッドで 'defaultcontroller'というコントローラを持っていると仮定します。私は通常、私の 'errorcontroller'で 'notfound'メソッドを使用します。 –

+0

私は 'defaultroute'メソッドでdefaultcontrollerを持っていますが、そこには決して行きません。私はcustomErrorsを使いたくありません。 – SirMoreno

答えて

0

ここで指摘したいことがいくつかあります。

物理ファイルに多くのIgnoreRouteエントリを使用しています。フレームワークは、URLをルーティングする前にデフォルトでurlに一致する物理ファイルを探し出すので、これを行う必要はありません。 Global.asaxのRouteCollectionでRouteExistingFilesをtrueに設定して、物理ファイルの一致を無効にすることができます。この場合、あなたはそれをしていません。

第2に、/ A/{controller}以外のルートは、すべての経路をキャッチすることで捕捉されます(*で始まるものは、すべての経路をキャッチします)。

私はこの設定を試しましたが、上記以外のすべてのルートをキャッチします。しかし、あなたが念頭に置いておかなければならないことは、上記の設定は、次のタイプのURL:/ A/something /とすべて一致することです。なぜなら、第2セグメントは常に{controller}プレースホルダと一致するからです。唯一の「タスク」コントローラと、このURLと一致するには、次のようにルート上の制約を定義することができます。

routes.MapRoute("Pages", "A/{controller}", new { controller = "Tasks", action = "InitPage" }, new {controller="Home"}); 

あなたのキャッチすべてのルート設定で、スペルの間違いもあります。 action = "DefaultRout"はaction = "DefaultRoute"にする必要があります

これが役に立ちます。

6

は、あなたのweb.configファイルを使用することはできませんか?

<customErrors mode="On" defaultRedirect="/error/default"> 
    <error statusCode="403" redirect="/error/restricted"/> 
    <error statusCode="404" redirect="/Default/DefaultRoute"/> 
    <error statusCode="500" redirect="/error/problem"/> 
</customErrors> 
+0

恐ろしい!これはまさに私が探していたものでした、ありがとう:) – ChickSentMeHighE

+1

これはSEOを使用しないでください。 デフォルトのクライアントでWeb設定を使用すると、302のhttpヘッダー(リダイレクト)と200ページの1ページが受信されます。改善されたクローラーは404ヘッダーで1ページのみを返す必要があります... –

関連する問題