ASP.NET リダイレクトでの ThreadAbortException への対処
問題:
ASP.NET でページのリダイレクトに Response.Redirect(...)
を使用すると、恐ろしい「System.Threading.ThreadAbortException」エラーが発生する可能性があります。
例外を理解する:
この例外は、Response.Redirect
がデフォルトでリダイレクト コマンドの後にコードの実行を継続するために発生します。 その後、Web サーバーはリクエストを途中で終了し、例外が発生します。
解決策: 制御されたリダイレクト
これを回避する最善の方法は、応答の終了を制御できる Response.Redirect
オーバーロードを使用することです。
<code class="language-csharp">Response.Redirect(url, false); Context.ApplicationInstance.CompleteRequest();</code>
endResponse
パラメータを false
に設定すると、リクエストが即時に終了することを防ぎます。 Context.ApplicationInstance.CompleteRequest()
は、EndRequest
フェーズに直接進むよう IIS に明示的に信号を送り、リダイレクト後の不要なコードの実行を回避してパフォーマンスを最適化します。
これが優れている理由:
Response.Redirect(url, true)
を使用するだけで解決策のように思えるかもしれませんが、リダイレクトが有効になる前にページ上の残りのコードが (短時間ではありますが) 引き続き実行されるため、パフォーマンスの問題が発生する可能性があります。上記の方法は、よりクリーンで効率的なリダイレクトを提供します。
さらに読む:
Application_Error
ハンドラー内のリダイレクトなどのエッジ ケースの処理について詳しくは、Thomas Marquardt のブログなどのリソースを参照してください (利用可能な場合はここにリンクが挿入されます)。
以上がASP.NET で Response.Redirect 中に ThreadAbortException を回避する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。