通常の Asp.Net 4.0 Web フォーム Web サイトがあります。私がする時:
Response.Redirect("SomePage.aspx");
次のコード行が実行されることを期待しています。しかし、驚くべきことに、コードの次の行は決して実行されません。いつ、なぜそれが起こるのか誰にもわかりますか?
通常の Asp.Net 4.0 Web フォーム Web サイトがあります。私がする時:
Response.Redirect("SomePage.aspx");
次のコード行が実行されることを期待しています。しかし、驚くべきことに、コードの次の行は決して実行されません。いつ、なぜそれが起こるのか誰にもわかりますか?
元の URL で示されるページに表示される HTML テキストや Response.Write テキストなどの応答本文のコンテンツは無視されます。さらに、Redirect メソッドが処理されると、現在のページでのコードの実行が終了するため、ページ内の後続のコードも無視されます。
ソース: http://msdn.microsoft.com/en-us/library/ms524309(v=vs.90).aspx
Response.Redirect
2つのパラメータも受け入れます。ブール値である2番目のパラメーターは、現在のページの実行を終了するかどうかを示します。
したがって、呼び出しは後続のコード行を実行し、ログファイルにフラッディングされるのResponse.Redirect("Page.aspx",false)
を防ぎます。ThreadAbortException
更新:デフォルトの動作が実行されない理由に答えるため
を使用する場合Response.Redirect
、302ヘッダーのみをクライアントに送信することが期待されます。したがって、デフォルトでは、応答をフラッシュして現在のスレッドを中止するため、後続のアクションは実行されません。
たとえば、承認/認証モジュールでは、ユーザーがリソースにアクセスする資格がないことがわかったら、リダイレクトを実行するだけで、セキュリティ上の理由から、残りのイベントライフサイクルは実行されません。
response.redirectは、関数内のreturnステートメントと同じです。そのため、リターン後に書き込んだ行は実行されません。response.redirect()についても同じことが言えます。現在のページの実行はresponse.redirect()の後に終了します