web-dev-qa-db-ja.com

Response.Redirect(url、true)を使用する場合

Global.asaxのApplication_Errorに、プリティファイドエラーメッセージを含むエラーページにリダイレクトしています。

現時点ではそれは言う:

Response.Redirect("Error.aspx", true);

それは次のようになります:

Response.Redirect("Error.aspx", false); 

どのような状況でtrueを使用すべきか、またfalseを使用すべきかはわかりません。 MSDNページ は、ThreadAbortExceptionsを回避するためにfalseを使用することを好むため、いつtrueを使用する必要がありますか?

35
Jackson Pope

スレッドを中止したくない場合は、falseを使用します。つまり、falseはコードの実行を継続します。そのため、Response.Redirectの後に表示されるコード行が実行されます。 trueはスレッドを強制終了するだけなので、それ以上実行されることはありません。その結果、ThreadAbortExceptionがスローされます。

そのため、実際には、その状況の残りのコードがどのように見えるかに基づいた判断の呼び出しです。通常、実行パスの最後にResponse.Redirectの呼び出しを配置し​​て、それ以上実行する必要がないようにします。しかし、多くの場合そうではありません。コードのロジックフローをどのように制御するかだけです。

たとえば、Response.Redirectの後の次の行がreturnであり、実行パスが単純に終了する場合、おそらく大丈夫です。しかし、すべての種類のロジックがあり、この場合に実行するとシステムが不明な状態のままになる場合、スレッドを中止することができます。

個人的には、スレッドの中止は、ロジック制御が不十分であることを示していると考えています。これは、例外がロジックフローの制御に使用される、よく知られたコードの匂いに似ています。スレッドを中止して例外をスローする必要なく、ロジックフローを制御できる場合は、おそらく優先されます。

46
David

Enter image description here

Response.Redirect(URL、false):クライアントは新しいページにリダイレクトされ、サーバー上の現在のページは処理を続行します。

Response.Redirect(URL、true):クライアントは新しいページにリダイレクトされますが、現在のページの処理は中止されます。

違いを示すこのビデオも見ることができますResponse.Redirect(False vs True)ASP.NETインタビューの質問と回答

34

Booleanパラメーターなしのオーバーロードがあるため、trueを使用する必要はありません。

Response.Redirect("Error.aspx", false);

または

Response.Redirect("Error.aspx");

実行を停止せずにリダイレクトを設定できるように、ブールパラメータが追加されました。データバインディングの発生など、余分なコストを発生させずに自分でページコードを終了できる場合は、望ましい方法です。

16
Guffa

want他のすべてのスレッドを中止するため、ここではtrueを使用するのが最適です。エラーが発生したため、アプリケーションを続行できません。

7
τεκ

Trueに設定すると、アプリケーションは応答を終了してユーザーに送り返します。falseに設定すると、リダイレクト後のコードが実行され続け、ユーザーは新しいページにリダイレクトされます。ページ読み込みのライフサイクル全体が終了します。

4
Atzoya