87

呼び出すResponse.Redirect(someUrl)と、次の HttpException が発生します。

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

なぜ私はこれを得るのですか?そして、どうすればこの問題を解決できますか?

4

15 に答える 15

122

の MSDN ドキュメントによると、Response.Redirect(string url)「HTTP ヘッダーが送信された後にリダイレクトが試行された」場合、HttpException がスローされます。Response.Redirect(string url)は Http "Location" 応答ヘッダー ( http://en.wikipedia.org/wiki/HTTP_headers#Responses ) を使用するため、これを呼び出すとヘッダーがクライアントに送信されます。つまり、もう一度呼び出した場合、または別の方法でヘッダーを送信した後に呼び出した場合、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");
于 2008-10-01T20:25:23.097 に答える
17

コンテンツをクライアントに送信すると、HTTP ヘッダーは既に送信されています。Response.Redirect()呼び出しは、ブラウザーに別の URL を要求させる特別な情報をヘッダーで送信することによって機能します 。

ヘッダーは既に送信されているため、asp.net は必要なことを実行できません (ヘッダーを変更します)。

これを回避するには、a) 他の操作を行う前に Redirect を実行するか、b) 他の操作をResponse.Buffer = true行う前に使用してみて、ページ全体の実行が完了するまでクライアントに出力が送信されないようにします。

于 2008-10-01T20:27:04.810 に答える
8

リダイレクトは、HTTP メッセージの最初の行が " " の場合にのみ発生しますHTTP/1.x 3xx Redirect Reason

すでにResponse.Write()いくつかのヘッダーを呼び出しているか、設定している場合は、リダイレクトするには遅すぎます。リダイレクトの前に電話Response.Headers.Clear()してみて、それが役立つかどうかを確認できます。

于 2008-10-01T20:24:38.293 に答える
3

バッファリング オプションを false (デフォルトでは true) に設定しているかどうかを確認してください。response.redirect を機能させるには、

  1. バッファリングは true である必要があります。
  2. デフォルトのバッファサイズを超える response.write を使用してそれ以上のデータを送信するべきではありません (この場合、それ自体がフラッシュされ、ヘッダーが送信されます)。したがって、リダイレクトできなくなります。
于 2009-05-01T09:27:54.740 に答える
3

使用する return RedirectPermanent(myUrl)とうまくいきました

于 2016-03-23T08:45:38.290 に答える
2

以下のコードを使用することもできます

Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
于 2016-11-02T04:21:16.437 に答える
1

ヘッダーが送信された後にリダイレクトしようとしている場合 (たとえば、部分的に生成されたページからエラー リダイレクトを行っている場合)、クライアント Javascript (location.replace または location.href など) を送信できます。任意の URL にリダイレクトします。もちろん、それは既に送信された HTML によって異なります。

于 2010-02-18T21:29:08.137 に答える
1

リダイレクト部分の前のResponseように、s のメソッドを使用しないようにしてください。Response.Flush();

于 2016-10-13T12:27:42.440 に答える
1

Response.RedirectToRoute("CultureEnabled", RouteData.Values); を使用して問題を解決しました。Response.Redirect の代わりに。

于 2015-10-31T16:43:21.973 に答える
1

「HTTPヘッダーが送信された後にリダイレクトできません」を処理する例外ハンドラーを追加することで、私の問題は解決しました。以下のコードに示すように、このエラー

catch (System.Threading.ThreadAbortException)
        {
            // To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
        }
        catch (Exception e)
        {//Here you can put your context.response.redirect("page.aspx");}
于 2013-01-08T12:02:55.290 に答える
1

これに対する簡単な答えが 1 つあります。ヘッダーを送信する前に、ページからの出力に関連するテキストやその他の何かが出力されています。これは、そのエラーが発生する理由に影響します。

可能性のある出力についてコードを確認するか、メソッドの上にヘッダーを配置して、最初に送信されるようにすることができます。

于 2010-01-14T03:07:52.227 に答える
0

リダイレクト機能は、おそらく「refresh」http ヘッダーを使用することで機能します (おそらく 30X コードも使用します)。ヘッダーがクライアントに送信されると、サーバーがそのリダイレクト コマンドを追加する方法がなくなり、遅すぎます。

于 2009-05-01T09:07:35.867 に答える