呼び出すResponse.Redirect(someUrl)
と、次の HttpException が発生します。
HTTP ヘッダーが送信された後はリダイレクトできません。
なぜ私はこれを得るのですか?そして、どうすればこの問題を解決できますか?
呼び出す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 ) を使用するため、これを呼び出すとヘッダーがクライアントに送信されます。つまり、もう一度呼び出した場合、または別の方法でヘッダーを送信した後に呼び出した場合、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");
コンテンツをクライアントに送信すると、HTTP ヘッダーは既に送信されています。Response.Redirect()
呼び出しは、ブラウザーに別の URL を要求させる特別な情報をヘッダーで送信することによって機能します 。
ヘッダーは既に送信されているため、asp.net は必要なことを実行できません (ヘッダーを変更します)。
これを回避するには、a) 他の操作を行う前に Redirect を実行するか、b) 他の操作をResponse.Buffer = true
行う前に使用してみて、ページ全体の実行が完了するまでクライアントに出力が送信されないようにします。
リダイレクトは、HTTP メッセージの最初の行が " " の場合にのみ発生しますHTTP/1.x 3xx Redirect Reason
。
すでにResponse.Write()
いくつかのヘッダーを呼び出しているか、設定している場合は、リダイレクトするには遅すぎます。リダイレクトの前に電話Response.Headers.Clear()
してみて、それが役立つかどうかを確認できます。
バッファリング オプションを false (デフォルトでは true) に設定しているかどうかを確認してください。response.redirect を機能させるには、
使用する
return RedirectPermanent(myUrl)
とうまくいきました
以下のコードを使用することもできます
Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
ヘッダーが送信された後にリダイレクトしようとしている場合 (たとえば、部分的に生成されたページからエラー リダイレクトを行っている場合)、クライアント Javascript (location.replace または location.href など) を送信できます。任意の URL にリダイレクトします。もちろん、それは既に送信された HTML によって異なります。
リダイレクト部分の前のResponse
ように、s のメソッドを使用しないようにしてください。Response.Flush();
Response.RedirectToRoute("CultureEnabled", RouteData.Values); を使用して問題を解決しました。Response.Redirect の代わりに。
「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");}
これに対する簡単な答えが 1 つあります。ヘッダーを送信する前に、ページからの出力に関連するテキストやその他の何かが出力されています。これは、そのエラーが発生する理由に影響します。
可能性のある出力についてコードを確認するか、メソッドの上にヘッダーを配置して、最初に送信されるようにすることができます。
リダイレクト機能は、おそらく「refresh」http ヘッダーを使用することで機能します (おそらく 30X コードも使用します)。ヘッダーがクライアントに送信されると、サーバーがそのリダイレクト コマンドを追加する方法がなくなり、遅すぎます。