Response.Redirect() は現在実行中のメソッドを中止させますか? または、Response.Redirect() の後のコードも実行されますか?
(つまり、Response.Redirect の後に Sub を返す/終了する必要がありますか?)
Response.Redirect() は現在実行中のメソッドを中止させますか? または、Response.Redirect() の後のコードも実行されますか?
(つまり、Response.Redirect の後に Sub を返す/終了する必要がありますか?)
Response.Redirect
の呼び出しで response を終了Response.Redirect
する必要があるかどうかを示すブール値の引数を受け入れるオーバーロードがあります。この引数を指定せずにオーバーロードを呼び出すことは、応答を終了するように指定することと同じです。true
応答の終了Response.End
とは、リダイレクトが発生するように応答が変更された後に呼び出され、現在のモジュールを終了するためにをResponse.End
スローすることを意味します。ThreadAbortException
への呼び出しの後のコードは呼び出されResponse.Redirect
ません (false
追加の引数を指定しない限り)。実際にはfinally
、特定のハンドラーcatch
のコードが実行されますが、.ThreadAbortException
これは完全な答えではないかもしれませんが、私が見たものから...
Response.Redirectは、System.Threading.ThreadAbortExceptionをスローすることにより、実際にコードの実行を停止させます。
Global.Asaxでグローバルエラー処理を設定し、Response.Redirectをテストすることで、これを自分で確認できます。
編集
そして、ここに私の答えをサポートするドキュメントへのリンクがあります:
リダイレクト呼び出しEndは、完了時にThreadAbortException例外を発生させます。
Response.Redirect には、endResponse という別のパラメーターがあります。コンテキストを正しく制御する必要があるため、try catch ブロックでリダイレクトする場合は false に設定することをお勧めします。したがって、catch ブロックは例外を取得します。
これに対する注意点は、ページがキャンセル可能でない場合、制御を取得しようとしないことです。これの最も一般的なケースは、Global.asax です。したがって、そのコンテキストではこの例外について心配する必要はありません。信じられない場合は、このメソッドのコードを反映して見てください。
したがって、質問に答えるために、デフォルトで endResponse を true に設定する (つまり、bool を取らないメソッドで呼び出される) 場合、Response.Redirect の後に多くのことを行う必要はありません。
私の理解では、Response.Redirect()を発行すると、それに続くコードは実行されません。あなたがそれについて考えるならば、それを実行しないことは理にかなっています。あなたは基本的にあなたがどこかに行きたいとあなたのコードに言っています。
例:マクドナルドでお得な食事を注文することと考えてください。あなたがそれを注文し、彼らがあなたの飲み物を満たし始めたら、あなたは考えを変えて、「あなたは何を知っている、私の注文を忘れる。私はウェンディーズに自分自身をリダイレクトするつもりだ」と言います。その時点で、彼らはあなたのフライドポテトとハンバーガーを作るのをやめます。なぜなら、まあ...あなたはどこかに行くことに決めたからです-つまり、応答をリダイレクトします。