Response.Redirect()は現在実行中のメソッドを中断させますか? Response.Redirect()も実行した後のコードですか?ASP.NET:Response.Redirect(...)の後のコードはどうなりますか?
(つまり、それは?Response.Redirectを後/終了サブを戻す必要がある)が、私は見てきたものから、
Response.Redirect()は現在実行中のメソッドを中断させますか? Response.Redirect()も実行した後のコードですか?ASP.NET:Response.Redirect(...)の後のコードはどうなりますか?
(つまり、それは?Response.Redirectを後/終了サブを戻す必要がある)が、私は見てきたものから、
これは完全な答えではないかもしれない...
レスポンス.Redirectは、実際にはSystem.Threading.ThreadAbortExceptionをスローしてコードの実行を停止させます。
あなたは、Global.asaxの中での取り扱いとのResponse.Redirectをテストグローバルエラーを設定することによって、自分自身のためにこれを見ることができます。
リダイレクトが 完了時に ThreadAbortExceptionの例外を発生させ、エンド呼び出す:
ここ
とEDIT
は私の答えをサポートドキュメントへのリンクです。
私の理解では、Response.Redirectを()、コードを発行する時に、それは実行されません、次のことです。あなたがそれについて考えるなら、それを実行しないと意味があります。あなたは基本的にあなたがどこか別の場所に行きたいとあなたのコードを伝えています。
例:マクドナルドでのお食事の注文とお考えください。あなたはそれを注文し、彼らはあなたの飲み物を充填開始した後、あなたはあなたの心を変更して言う、「あなたは何を知っている、私の注文を忘れて。私自身は、ウェンディーズにリダイレクトに行きますよ。」その時点で、彼らはあなたのフライやハンバーガーの製造をやめようとしています。なぜなら、あなたはどこか別の場所に行くことに決めました。つまり応答をリダイレクトします。
Response.Redirect
は、Response.Redirect
への呼び出しがに応答を終了する必要があるかどうかを示すboolean型の引数を受け取ります。この引数なしでオーバーロードを呼び出すのは、応答が終了することを示すためにtrue
を指定するのと同じです。 REPONSEエンディング
応答は、リダイレクトが発生するように改変されている、及びResponse.End
は現在のモジュールを終了するThreadAbortException
をスロー後Response.End
が呼び出されることを意味します。
Response.Redirect
を呼び出した後のコードは、(余分な引数にfalse
を指定しない限り)呼び出されることはありません。実際には、finally
および特定のcatch
ハンドラ内のコードが実行されますが、あなたははThreadAbortException
を飲み込むことができません。
あなたがこれを投稿したときに私が99%の回答を書いたことがなかったら、私は私のことに気にしませんでした。 NiceはThreadAbortExceptionについての詳細も追加しました。 – Jon
なぜこれは受け入れられなかったのですか? –
と呼ばれるendResponseをResponse.Redirectをする別のパラメータがあります。コンテキストを正しく制御する必要があるため、try catchブロックでリダイレクトするときはfalseを設定するとよいでしょう。したがって、キャッチブロックは例外を選択します。
と注意点は、ページがキャンセルできないとき、それが制御を取得しようとしないだろうということです。これの最も一般的なケースはGlobal.asaxです。そのため、この例外については心配する必要はありません。あなたが私にこのメソッドのコードを反映させてみると信じられないなら、見てください。
あなたの質問に答えるために、endResponseをtrueに設定したときにResponse.Redirectの後に行う必要はほとんどありません(デフォルトではboolを使用しないメソッドで呼び出されます)。
私は実際の例を使用するのが好きです。 – David
私はそれが、実世界の例ではなく、類推であると言います。 RWEは、ASP.NET Frameworkと開発者のコード内で何が起こったのでしょうか。 –