2

一般に、.NET の場合は、次の使用をお勧めします。

Response.Redirect("url", false)

それ以外の

Response.Redirect("url", true)

後者は明らかにプロセスを突然終了するため、競合状態を回避します。

trueの代わりに使用するのが理にかなっている場合はありfalseますか?

リダイレクトがまったく同じ aspx ページへのポストバックではなく、別の aspx ページへのリダイレクトである場合falseよりも適していますか?true

4

3 に答える 3

2

最も単純にはtrue、応答を終了したい場合と終了しfalseない場合に使用します。(trueこの場合、何も指定されていない場合は、これがデフォルトであることに注意してください。)

まず、この方法で応答を終了すると がスローされるThreadAbortExceptionため、一般的には可能であれば避けま​​す。その正確な例外シナリオは、何年にもわたって本番環境で多くの ASP.NET 開発者を驚かせてきました。また、例外が発生していない場合は例外をスローする必要はなく、通常のロジック フローのみです。

ベスト プラクティスは、スレッドを中止せずに実行を終了できるように、それに応じてロジック フローを構成することです。多くの場合、シンプルなreturn;後がそれをResponse.Redirect()実現します。より複雑なケース (つまり、return;大規模なコード ビハインド メソッド全体に多数のパスが存在するケース) では、問題はリダイレクトではなく、リファクタリングが必要なランナウェイ メソッド サイズにある可能性があります。より扱いやすいもの。

メソッドを終了する方法でResponse.Redirect()ないことを覚えておいてください。リダイレクトを実行しているという事実をしばらく忘れて、これはロジック フローがそれに応じてメソッドを終了する必要がある通常の C# コードであると考えてください。メソッドが最後に行うこと、またはロジック フローが一般的に行う最後のことである場合Response.Redirect()は、問題ありません。

于 2013-11-11T16:40:37.250 に答える
1

falseスレッドを中止しないように使用されるため、スレッドの前後のステートメントResponse.Redirect()が実行されます。

ここでクライアントは新しいページにリダイレクトされますが、それでも現在のページはServer

trueスレッドを中止してリダイレクトするために使用されるため、前後のステートメントはResponse.Redirect()実行されません。

ここで、クライアントは新しいページにリダイレクトされ、現在のページは実行されませんServer

于 2013-11-11T16:36:52.000 に答える
0

確かなことに、ブロックResponse.Redirect("url", false)内なら使いたいですよね。try catch

それ以外の場合、ThreadAbortException がスローされます。

try {
  Response.Redirect("url", false);
}
catch(Exception ex) {
   // Log exception
}
于 2013-11-11T16:39:52.997 に答える