Global.asaxのApplication_Error
に、プリティファイドエラーメッセージを含むエラーページにリダイレクトしています。
現時点ではそれは言う:
Response.Redirect("Error.aspx", true);
それは次のようになります:
Response.Redirect("Error.aspx", false);
どのような状況でtrue
を使用すべきか、またfalse
を使用すべきかはわかりません。 MSDNページ は、ThreadAbortExceptionsを回避するためにfalse
を使用することを好むため、いつtrue
を使用する必要がありますか?
スレッドを中止したくない場合は、false
を使用します。つまり、false
はコードの実行を継続します。そのため、Response.Redirect
の後に表示されるコード行が実行されます。 true
はスレッドを強制終了するだけなので、それ以上実行されることはありません。その結果、ThreadAbortException
がスローされます。
そのため、実際には、その状況の残りのコードがどのように見えるかに基づいた判断の呼び出しです。通常、実行パスの最後にResponse.Redirect
の呼び出しを配置して、それ以上実行する必要がないようにします。しかし、多くの場合そうではありません。コードのロジックフローをどのように制御するかだけです。
たとえば、Response.Redirect
の後の次の行がreturn
であり、実行パスが単純に終了する場合、おそらく大丈夫です。しかし、すべての種類のロジックがあり、この場合に実行するとシステムが不明な状態のままになる場合、スレッドを中止することができます。
個人的には、スレッドの中止は、ロジック制御が不十分であることを示していると考えています。これは、例外がロジックフローの制御に使用される、よく知られたコードの匂いに似ています。スレッドを中止して例外をスローする必要なく、ロジックフローを制御できる場合は、おそらく優先されます。
Response.Redirect(URL、false):クライアントは新しいページにリダイレクトされ、サーバー上の現在のページは処理を続行します。
Response.Redirect(URL、true):クライアントは新しいページにリダイレクトされますが、現在のページの処理は中止されます。
違いを示すこのビデオも見ることができますResponse.Redirect(False vs True)ASP.NETインタビューの質問と回答 。
Booleanパラメーターなしのオーバーロードがあるため、true
を使用する必要はありません。
Response.Redirect("Error.aspx", false);
または
Response.Redirect("Error.aspx");
実行を停止せずにリダイレクトを設定できるように、ブールパラメータが追加されました。データバインディングの発生など、余分なコストを発生させずに自分でページコードを終了できる場合は、望ましい方法です。
want他のすべてのスレッドを中止するため、ここではtrue
を使用するのが最適です。エラーが発生したため、アプリケーションを続行できません。
Trueに設定すると、アプリケーションは応答を終了してユーザーに送り返します。falseに設定すると、リダイレクト後のコードが実行され続け、ユーザーは新しいページにリダイレクトされます。ページ読み込みのライフサイクル全体が終了します。