1. ホーム
  2. asp.net

[解決済み] Response.Redirect()を呼び出すと「Cannot redirect after HTTP headers have been sent」と表示されるのですが、なぜでしょうか?

2022-02-17 21:22:08

質問

電話するとき Response.Redirect(someUrl) 以下のようなHttpExceptionが発生します。

HTTP ヘッダが送信された後では、リダイレクトできません。

なぜこのようなことが起こるのでしょうか?また、どうすればこの問題を解決できますか?

解決方法は?

のMSDNドキュメントによると Response.Redirect(string url) HTTP ヘッダが送信された後にリダイレクトが試みられると、HttpException がスローされます。 そのため Response.Redirect(string url) は、Http "Location" レスポンスヘッダを使用しています ( http://en.wikipedia.org/wiki/HTTP_headers#Responses ) を呼び出すと、ヘッダがクライアントに送信されます。 つまり、2回目に呼び出したり、他の方法でヘッダを送信させた後に呼び出すと、HttpExceptionが発生することになります。

Response.Redirect()を何度も呼び出さないようにするための1つの方法として Response.IsRequestBeingRedirected プロパティ(bool)を呼び出してから行います。

// Causes headers to be sent to the client (Http "Location" response header)
Response.Redirect("http://www.stackoverflow.com");
if (!Response.IsRequestBeingRedirected)
    // Will not be called
    Response.Redirect("http://www.google.com");