まず第一に、私が正確に達成したいこと:特定の例外を HTTP 404 に変換して、ASP.NET がそれをさらに処理できるようにします。
ASP.NET (MVC2) で次のように例外を処理しています。
protected void Application_Error(object sender, EventArgs e) {
var err = Server.GetLastError();
if (err == null)
return;
err = err.GetBaseException();
var noObject = err as ObjectNotFoundException;
if (noObject != null)
HandleObjectNotFound();
var handled = noObject != null;
if (!handled)
Logger.Fatal("Unhandled exception has occured in application.", err);
}
private void HandleObjectNotFound() {
Server.ClearError();
Response.Clear();
// new HttpExcepton(404, "Not Found"); // Throw or not to throw?
Response.StatusCode = 404;
Response.StatusDescription = "Not Found";
Response.StatusDescription = "Not Found";
Response.Write("The whole HTML body explaining whata 404 is??");
}
問題は、デフォルトで動作するように設定できないcustomErrors
ことです。その場合、 :on
で指定されたページにリダイレクトされることはありません。customErrors
<error statusCode="404" redirect="404.html"/>
私もハンドラーから発生させようとしましnew HttpExcepton(404, "Not Found")
たが、応答コードは200
理由がわかりません。
質問は次のとおりです。
AnException
HTTP404
応答に変換する適切な方法は何ですか?customErrors
Application_Error で例外を処理するとき、セクションはどのように機能しますか?- HttpException(404) をスローすると、(空白の) ページが成功 (200) ステータスでレンダリングされるのはなぜですか?
ありがとう、
ドミトリー。