VB.NET で作業していて、500 エラー処理に問題があります。
私の問題は、500 エラーがスローされると、サイトがエラー ページにリダイレクトされることです。しかし、Chrome の [ネットワーク] タブを調べると、エラーをスローしたページで 200 (OK) が返され、リダイレクト先のページで別の 200 が返されることがわかります。
エラーをスローしたページでは 500 エラーが返され、リダイレクトされたページでは 200 が返されると考えてよろしいですか?
私の Web 構成のエラー処理は次のように設定されています。
<customErrors defaultRedirect="~/error.aspx" mode="On">
<error statusCode="400" redirect="~/400Error.aspx" />
<error statusCode="500" redirect="~/error.aspx?code=500" />
</customErrors>
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/error.aspx" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="/error.aspx?code=500" responseMode="ExecuteURL" />
<remove statusCode="400" subStatusCode="-1" />
<error statusCode="400" prefixLanguageFilePath="" path="/400Error.aspx" responseMode="ExecuteURL" />
</httpErrors>
しかし、これだけでも、上で説明した問題が発生します。
Global.asax ファイルの Application_Error のいずれかを使用して、ページに 500 を返すことができるのではないかと考えました。
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Response.StatusCode = System.Net.HttpStatusCode.InternalServerError
Server.ClearError()
Server.Transfer("error.aspx?code=500")
End Sub
または、マスター ページに同様のコードを追加して、ページ レベルで:
Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error
Response.StatusCode = System.Net.HttpStatusCode.InternalServerError
Server.ClearError()
Server.Transfer("error.aspx?code=500")
End Sub
ページ レベルでエラーをキャッチすると、エラー ページにリダイレクトされ、web.config ファイルでエラーを処理した場合と同じ結果が得られます。アプリケーション レベルでエラーをキャッチすると、リダイレクト (?) を実行せずにエラー ページが返されるように見えますが、この場合は 200 が 1 つだけ返されます。
上記のコードの組み合わせを試してみました - Server.ClearError() が web.config レベルへの「バブルアップ」からエラーを停止することを理解していますか? しかし、私はその行の有無にかかわらず試してみましたが、あまり成功しませんでした.
エラーをスローするページで 500 を返すのが正しいかどうか、もしそうなら、これを達成するために何ができるか教えてもらえますか?