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