1

この記事に従って、asp.net mvc アプリケーションにカスタム エラーを実装しました。私が気付いたのは、 http://www.mysite.com/some-non-existent-controller-and-actionにアクセスすると、予想どおり 404 エラー ページが表示されることです。ただし、firebug で何が起こるかを見ると、存在しないページに対して 302 Found 応答が返され、カスタム エラー ページにリダイレクトされ、404 が返されます (カスタム エラー ページが表示されます)。これは正しいですか?最初に返された 302 は、特に SEO の観点からはあまり良くないと思います。これをどのように実装したかをもう一度考える必要があるかもしれません。

4

2 に答える 2

1

404 を処理するための最良のガイド (と思います) は、この回答にあります。基本的に、404 が発生する方法は複数あります。

  1. ルートが存在しません - キャッチオール ルールに一致します。
  2. ルートは一致しましたが、コントローラーが見つかりませんでした - 動的コントローラー名を持つルールの場合 -{controller}/{action}/{parameter}ルール。
  3. ルートは見つかりましたが、アクションが見つかりませんでした -HandleUnknownActionオーバーライドによって処理されました。
  4. ルートとアクションが見つかりましたが、パラメーターを変換できませんでした - キャッチオール ルールに一致しました。

リンクされた回答は、基本的に、URL を書き換えることなくコードの任意の場所から実行できるコントローラーを設定します。これが必要です。

さらに、未処理の例外や不適切な URL (山かっこなどの安全でない文字を含むものなど) の処理についても考慮する必要があります。その特定のケースでは、URL書き換える必要があります。そうしないと、応答をまったくレンダリングできません。これらの特定の要求はちょっと難しいです。私はそれについてここでブログを書きました.

于 2010-06-25T00:28:45.383 に答える
0

「NotFound」アクションに対応する「キャッチオール」ルートを追加して、ページの下部に向かってアドバイスに従いましたか。

routes.MapRoute("Catch All", "{*path}",
    new { controller = "Error", action = "NotFound" });

これを追加する最後のルートにすると、「不明な」URL は の「NotFound」アクションに直接マップされ、ErrorControllerそこから「見つかりません」ビューを直接返すことができます。リダイレクトは必要ありません。

于 2010-06-25T00:03:50.720 に答える