私たちは、ASP.NETによってスローされた例外のために以下のように私たちのカスタムエラーページを設定した:それはURLが変更されませんが保証としてリクエストの検証例外がスローされたときにカスタムエラーページを表示するには?
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="400" redirect="~/400.aspx"/>
<error statusCode="404" redirect="~/404.aspx"/>
<error statusCode="500" redirect="~/500.aspx"/>
</customErrors>
はredirectMode="ResponseRewrite"
を設定することが重要である(私はASP.NETがServer.Transfer
の代わりを行い信じますResponse.Redirect
)。
残念ながら、これはリクエストの検証エラーでは機能しません。たとえば、カスタムエラーを有効にして/some/page/<script>
に移動すると、ASP.NETのリクエスト検証が開始され、HttpException
がスローされます。しかし私のカスタムエラーページを表示する代わりに、次のメッセージが表示されます。
'/'アプリケーションでサーバーエラーが発生しました。
ランタイムエラー
説明:リクエストの処理中に例外が発生しました。 さらに、最初の例外のためにカスタム エラーページを実行している間に別の例外が発生しました。要求は終了しました。
このシナリオでASP.NETがカスタムエラーページを表示できないのはなぜですか?エラーページにはコードがありません.HTMLページだけで例外がスローされないことがわかります。
Application_Error
でエラーをキャッチしてServer.Transfer
を発行すると、正常に動作するため、ASP.NETがカバーしていることが不思議です。
これを自分で処理する場合は、これ以上の解決策がありますか?
protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError() as HttpException;
if (ex != null
&& ex.Message.StartsWith("A potentially dangerous Request.Path value was detected from the client")
&& HttpContext.Current.IsCustomErrorEnabled)
{
Server.Transfer("400.aspx");
}
}
検証エラーにより400,404または500のエラーが発生することは確かですか?多分あなたの設定で扱われていない他のエラーコード – David
これを理解できましたか? – Animesh