では正常に動作していない私持っている私のGlobal.asaxの下部に以下の経路:MVC:404ルートが生産
//404 ERRORS:
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);
Visual Studioで正常に動作しますが、本番では、私はIISのエラーを取得していますページ。
URLがキャッチされないようにする必要があります。そのため、IISの観点からは404のURLはありません。 web.configで何かする必要がありますか?
注:私はではありません。は、404固有のURLにリダイレクトします。むしろ、私は要求されたURLで404エラーページを提供しています(私はこれがユーザビリティの観点から適切なアプローチであると信じています)。私のエラー制御装置において
UPDATE
、私は問題であるように思われ、Response.StatusCode = 404;
を設定しています。これを削除してプロダクションに再デプロイすると、フレンドリーなエラーページが再び表示されます。 SEOの目的のために - - しかし、私はは、HTTPヘッダーで404個のステータスが必要です信じるので、私の質問は今、次のようになります。
改訂QUESTION
方法/なぜIISが応答を傍受し、そのを送信していますすぐに使える404エラーと、これをどうやって防ぐのですか?
** SOLUTION * *
Dommerが必要であった(と思う)Response.TrySkipIisCustomErrors=true;
を示唆するために賞を取得します。しかし、2その他の重要な詳細があった:
- カスタムエラーが(!当たり前)web.configファイルにににする必要がある、と
- 404のアクションは、[HandleErrors]属性を持っている必要があります。 いくつかのURLは、「404-PageNotFound」以外の経路にマッピングされたが、無効なパラメータを含む、と私はにしたくないので、404ページにをリダイレクトする、取得可能性があるので、それはどこにでも
仕事を作る
私は私のベースコントローラでこのアクションを作成しました:
[HandleError]
public ActionResult NotFound()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View("PageNotFound", SearchUtilities.GetPageNotFoundModel(HttpContext.Request.RawUrl));
}
とベースを継承するすべてのコントローラのアクションで、私は単に私が無効なルートパラメータをキャッチしたときに、これを呼び出す必要があります:
return NotFound();
注:ない RedirectToAction()ケーキの上
アイシング:私はビューに生成され、渡されてきたモデルはGoogleの検索エンジンにURLの冗長なビットを供給についてです
フレンドリーな404ページに提案としてトップ3の結果を表示します。
のようにしてみてください。それはかなりよく見えます! –