私は通常のAsp.Net 4.0ウェブフォームウェブサイトを持っています。私がするとき:なぜResponse.Redirectは次のコード行を実行しないのですか?
Response.Redirect("SomePage.aspx");
私は次のコード行が実行されると思います。しかし、驚くべきことに、次のコード行は決して実行されません。誰がいつ、なぜそれが起こるのかを知ることができますか?
私は通常のAsp.Net 4.0ウェブフォームウェブサイトを持っています。私がするとき:なぜResponse.Redirectは次のコード行を実行しないのですか?
Response.Redirect("SomePage.aspx");
私は次のコード行が実行されると思います。しかし、驚くべきことに、次のコード行は決して実行されません。誰がいつ、なぜそれが起こるのかを知ることができますか?
Response.Redirect
also accepts two parametersブール値である2番目のパラメータは、現在のページの実行を終了する必要があるかどうかを示します。
したがって、Response.Redirect("Page.aspx",false)
を呼び出すと、後続のコード行が実行され、ログファイルにThreadAbortException
が浸水することがなくなります。
更新:デフォルトの動作はResponse.Redirect
は期待を使用している
がクライアントにのみ302ヘッダを送信することで実行しないことですなぜに答えるために。したがって、デフォルトでは、応答&は現在のスレッドを強制終了し、後続の処理は実行されません。
例:認可/認証モジュールで、ユーザーがリソースにアクセスする資格がないことがわかったら、セキュリティの理由からリダイレクトを行い、イベントライフサイクルの残りの部分を実行しないでください。
元のURLで示されたページの表示されたHTMLテキストやResponse.Writeテキストなど、応答本文の内容は無視されます。 さらに、Redirectメソッドが処理されると、現在のページでのコードの実行が終了し、ページ内の後続のコードも無視されます。
ソース:http://msdn.microsoft.com/en-us/library/ms524309(v=vs.90).aspx
のResponse.Redirect関数内のステートメントを返すに等しいです。戻り値の後に書く行は決して実行されません。 response.redirect()も同じです。現在のページの実行は、response.redirect()の後に終了します。
既にページをリダイレクトしています。したがって、次の行のコードは実行されません。 – Raptor
@ Shivan:どうですか? Response.Redirectはレスポンスヘッダーに位置ヘッダーを設定するだけでよいはずですか?次の行が実行されないようにする "return"キーワードを含んでいますか? – Jaggu
@Shadow_boiがあなたに答えました。 – Raptor