MVC3 Web サイトがあり、404 エラー ページを正しく表示しようとしています。私はそれをすべて設定しました
- URLをリダイレクトしません。
- ヘッダーで実際の 404 エラー ステータスを返し、
- URL をログに記録し、
- 私が作成したカスタムページです。
- .aspx/.html ページではなく、実際のアクション/コントローラー ページです。
Visual Studio でデバッグすると、完全に機能します。テスト環境または実稼働環境に投稿すると、機能せず、ヘッダーに 404 ステータスの一般的なファイルが見つかりませんでした。
エラー ページはデフォルトの 404 エラー ( thisまたは this ) ではありませんが、サーバー自体のグローバル カスタムのようです (サーバーは複数のサイトをホストし、すべての 404 は同じ単純な行ページを表示します)。サーバーのエラー ページには、実際には 500 エラー ページが表示されます。また、Response.TrySkipIisCustomErrors = true を設定してバイパスしようとしましたが、うまくいきません。
本番サーバーとテスト サーバーでは正しくログに記録されており、404 ステータス コードが返されない場合は、エラー ページが表示されます。それで、アクション/ビューが機能していると確信していますが、それはどういうわけかサーバーにあります。ASP.NET 4 と IIS 7 を実行しています。
これを修正するために何を/どこで調査するかについての提案はありますか?
.
コードのリソース これまでの私のソリューションは
、ASP.NET MVC で 404 を適切に処理するにはどうすればよいですか? に基づいています。
これは、Application_Error で例外をキャプチャすることによって、私が行っていることのベースです。簡単にループにつながる可能性があるため、私はまだ少し警戒しているので、それを防ぐためにすべてを試み/キャッチしました(別のエラーをキャッチする内にエラーが発生します)
global.asax のコード
protected void Application_Error(object sender, EventArgs e)
{
try
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException == null)
{
routeData.Values.Add("action", "NotFound");
}
else
{
switch (httpException.GetHttpCode())
{
case 404:
// Page not found.
routeData.Values.Add("action", "NotFound");
break;
case 500:
// Server error.
routeData.Values.Add("action", "ServerError");
break;
default:
routeData.Values.Add("action", "General");
break;
}
}
routeData.Values.Add("error", exception);
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
catch
{
//
}
}
エラー コントローラーのコード
public ActionResult NotFound()
{
try
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
Response.TrySkipIisCustomErrors = true;
}
catch
{}
return View();
}