ThreadAbortException は、Response.End、Response.Redirect、または Server.Transfer を使用する場合に発生します。
この記事は、または Server.Transfer
を使用Response.End
Response.Redirect
する場合に発生する ThreadAbortException エラーを解決するのに役立ちます。
元の製品バージョン: .NET Framework 4.5.2 の ASP.NET、.NET Framework 3.5 Service Pack 1 の ASP.NET
元の KB 番号: 312629
現象
、Response.Redirect
、または Server.Transfer
メソッドをResponse.End
使用すると、ThreadAbortException 例外が発生します。 ステートメントを try-catch
使用して、この例外をキャッチできます。
原因
メソッドは Response.End
ページの実行を終了し、アプリケーションのイベント パイプラインのApplication_EndRequest イベントに実行をシフトします。 次 Response.End
のコード行は実行されません。
この問題は、両方のメソッドが Response.End を内部的に呼び出すので、 メソッドと Server.Transfer
メソッドでResponse.Redirect
発生します。
解決方法
この問題を回避するには、次のいずれかの方法を使用します。
の場合
Response.End
は、 の代わりにResponse.End
メソッドをHttpContext.Current.ApplicationInstance.CompleteRequest
呼び出して、イベントへのコード実行をApplication_EndRequest
バイパスします。の場合
Response.Redirect
は、endResponse パラメーターに false を渡すオーバーロード Response.Redirect(String url, bool endResponse) を使用して、 への内部呼び出しをResponse.End
抑制します。 例:Response.Redirect ("nextpage.aspx", false);
この回避策を使用すると、次
Response.Redirect
のコードが実行されます。の場合は
Server.Transfer
、代わりに メソッドをServer.Execute
使用します。
ASP.NET はこの例外を処理しますが、 ステートメントを try-catch
使用してこの例外をキャッチできます。 例:
try
{
Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
Response.Write (ex.Message);
}
行にブレークポイントを Response.Write
追加し、このブレークポイントがヒットしたことを確認します。 例外を調べると、ThreadAbortException 例外が発生していることに注意してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示