42

Response.Redirect() は現在実行中のメソッドを中止させますか? または、Response.Redirect() の後のコードも実行されますか?

(つまり、Response.Redirect の後に Sub を返す/終了する必要がありますか?)

4

4 に答える 4

55

Response.Redirectの呼び出しで response を終了Response.Redirectする必要があるかどうかを示すブール値の引数を受け入れるオーバーロードがあります。この引数を指定せずにオーバーロードを呼び出すことは、応答を終了するように指定することと同じです。true

応答の終了Response.Endとは、リダイレクトが発生するように応答が変更された後に呼び出され、現在のモジュールを終了するためにをResponse.Endスローすることを意味します。ThreadAbortException

への呼び出しの後のコードは呼び出されResponse.Redirectません (false追加の引数を指定しない限り)。実際にはfinally、特定のハンドラーcatchのコードが実行されますが、.ThreadAbortException

于 2009-08-09T22:30:08.973 に答える
29

これは完全な答えではないかもしれませんが、私が見たものから...

Response.Redirectは、System.Threading.ThreadAbortExceptionをスローすることにより、実際にコードの実行を停止させます。

Global.Asaxでグローバルエラー処理を設定し、Response.Redirectをテストすることで、これを自分で確認できます。

編集

そして、ここに私の答えをサポートするドキュメントへのリンクがあります:

リダイレクト呼び出しEndは、完了時にThreadAbortException例外を発生させます。

HttpResponse.Redirectメソッド(文字列、ブール値)(System.Web)

于 2009-08-09T22:14:37.897 に答える
3

Response.Redirect には、endResponse という別のパラメーターがあります。コンテキストを正しく制御する必要があるため、try catch ブロックでリダイレクトする場合は false に設定することをお勧めします。したがって、catch ブロックは例外を取得します。

これに対する注意点は、ページがキャンセル可能でない場合、制御を取得しようとしないことです。これの最も一般的なケースは、Global.asax です。したがって、そのコンテキストではこの例外について心配する必要はありません。信じられない場合は、このメソッドのコードを反映して見てください。

したがって、質問に答えるために、デフォルトで endResponse を true に設定する (つまり、bool を取らないメソッドで呼び出される) 場合、Response.Redirect の後に多くのことを行う必要はありません。

于 2009-08-09T22:32:43.960 に答える
1

私の理解では、Response.Redirect()を発行すると、それに続くコードは実行されません。あなたがそれについて考えるならば、それを実行しないことは理にかなっています。あなたは基本的にあなたがどこかに行きたいとあなたのコードに言っています。

例:マクドナルドでお得な食事を注文することと考えてください。あなたがそれを注文し、彼らがあなたの飲み物を満たし始めたら、あなたは考えを変えて、「あなたは何を知っている、私の注文を忘れる。私はウェンディーズに自分自身をリダイレクトするつもりだ」と言います。その時点で、彼らはあなたのフライドポテトとハンバーガーを作るのをやめます。なぜなら、まあ...あなたはどこかに行くことに決めたからです-つまり、応答をリダイレクトします。

于 2009-08-09T22:20:07.540 に答える