То, почему я добираюсь, “Не может перенаправить после того, как HTTP-заголовки были отправлены”, когда я называю Ответ. Перенаправление ()?

Когда я звоню Response.Redirect(someUrl) Я получаю следующий HttpException:

Не может перенаправить после того, как HTTP-заголовки были отправлены.

Почему я получаю это? И как я могу устранить эту проблему?

81
задан B--rian 29 October 2019 в 13:45
поделиться

0 ответов

Согласно документации MSDN для Response.Redirect(string url), это бросит HttpException, когда "перенаправление будет предпринято после того, как HTTP-заголовки были отправлены". С тех пор Response.Redirect(string url) использование заголовок ответа "Местоположения" Http ( http://en.wikipedia.org/wiki/HTTP_headers#Responses ), называя его заставит заголовки быть отправленными клиенту. Это означает, что при вызове его вторым разом, или если Вы называете его после того, как Вы заставили заголовки быть отправленными некоторым другим способом, Вы получите HttpException.

Один способ принять меры против вызова Ответа. Перенаправление () многократно должно проверить 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");
116
ответ дан Samuel Meacham 24 November 2019 в 09:38
поделиться

Перенаправление может только произойти, если первая строка в сообщении HTTP" HTTP/1.x 3xx Redirect Reason".

, Если Вы уже назвали Response.Write() или установили некоторые заголовки, это будет слишком опаздывающее перенаправление. Можно попытаться звонить Response.Headers.Clear() перед Перенаправлением, чтобы видеть, помогает ли это.

8
ответ дан Mark Cidade 24 November 2019 в 09:38
поделиться

Как только Вы отправляете любое содержание вообще клиенту, HTTP-заголовки были уже отправлены. Response.Redirect() вызов работает путем отправки специальной информации в заголовках, которые заставляют браузер попросить различный URL.

, Так как заголовки были уже отправлены, asp.net не может сделать то, что Вы хотите (измените заголовки)

можно обойти это a) или выполнением Перенаправления, прежде чем Вы сделаете что угодно еще, или b) попыткой с помощью Response.Buffer = true, прежде чем Вы сделаете что угодно еще, чтобы удостовериться, что никакой вывод не отправляется клиенту, пока целая страница не сделана, выполнившись.

17
ответ дан mbudnik 24 November 2019 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: