2011-07-15 33 views
31

私はApplication_ErrorのGlobal.asaxにあらかじめ確認されたエラーメッセージを含むエラーページにリダイレクトしています。Response.Redirect(URL、true)はいつ使うべきですか?

現時点では、それは言う:

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

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

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

私はtrueを使用すべき状況下で、私はfalseを使用すべきか分かりませんか? MSDN pageは、ThreadAbortExceptionsを避けるためにfalseを使用することを好むと言います。だから、いつtrueを使うべきですか?

答えて

42

スレッドを中断したくない場合は、falseを使用します。つまり、falseはコードの実行を継続させます。したがって、Response.Redirectの後に現れるコード行が実行されます。 trueはスレッドを殺すだけで、それ以上実行されることはなく、ThreadAbortExceptionがスローされます。

それは実際には、状況のコードの残りの部分がどのように見えるかに基づいて、判断の呼び出しです。通常は、実行パスの最後にResponse.Redirectにコールを入れて、それ以上実行する必要がないようにします。しかし、何度もそうではありません。これは、コード内のロジックフローをどのように制御するかの問題です。

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

個人的には、スレッドを中断して論理制御が不良であることを示すことを検討します。これは例外的にロジックフローを制御するために例外が使用される、よく知られているコードの匂いに似ています。スレッドを中止して例外をスローする必要なしにロジックフローを制御できるなら、おそらくそれが望ましいでしょう。

7

ここではtrueを使用することをお勧めします。のすべての他のスレッドを中止する必要があります。エラーが発生してアプリケーションを続行できません。

4

trueに設定すると、アプリケーションは応答を終了してユーザーに返します。falseに設定すると、リダイレクト後のコードは引き続き実行され、ユーザーはフルページロードライフサイクルが終了した後の新しいページ。

14

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

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

または

Response.Redirect("Error.aspx"); 

あなたが実行を停止せずにリダイレクトを設定することができるように、ブールパラメータが追加されました。余分なコストを発生させることなくページコードから抜け出すことができれば(たとえば、データバインディングが発生するなど)、これが望ましいことです。

+1

trueの場合は+1がデフォルトです。彼らはそれをより明確にしておくべきだった – Aximili

28

Enter image description here

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

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

また、相違点を示すこのビデオを見ることができますResponse.Redirect (False vs True) ASP.NET Interview questions with answers

+1

+1ビデオはそれが第2のケースで次の行を実行しないことを明らかにする – Aximili

関連する問題