Почему при вызове Response.Redirect () появляется сообщение «Невозможно перенаправить после отправки заголовков HTTP»? - PullRequest
81 голосов
/ 02 октября 2008

Когда я звоню Response.Redirect(someUrl), я получаю HttpException: «Не удается перенаправить после отправки заголовков HTTP».

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

Ответы [ 15 ]

0 голосов
/ 28 декабря 2017

Есть 2 способа это исправить:

  1. Просто добавьте оператор return после вашего Response.Redirect(someUrl); (если сигнатура метода не "void", вам, конечно, придется вернуть этот "тип") как так:

    Response.Redirect ( "Login.aspx");

    возвращение;

Обратите внимание, что возврат позволяет серверу выполнить перенаправление ... без него сервер хочет продолжить выполнение остальной части вашего кода ...

  1. Сделайте ваш Response.Redirect(someUrl) оператор LAST, выполненный в методе, который вызывает исключение. Замените ваш Response.Redirect(someUrl) на строку VARIABLE с именем "someUrl" и установите для нее местоположение перенаправления ... следующим образом:

//......some code

string someUrl = String.Empty

..... немного логики

if (x=y)
{
    // comment (original location of Response.Redirect("Login.aspx");)
    someUrl = "Login.aspx";
}

...... больше кода

// ПЕРЕМЕЩАЙТЕ свой Response.Rirectirect to ЗДЕСЬ (конец метода):

Response.Redirect(someUrl);
return; 
0 голосов
/ 02 ноября 2016

Вы также можете использовать указанный ниже код

Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
0 голосов
/ 13 октября 2016

Убедитесь, что вы не используете Response s 'методы, такие как Response.Flush();, перед перенаправлением части.

0 голосов
/ 01 апреля 2015

Если вы получили сообщение Не удается перенаправить после отправки заголовков HTTP, попробуйте следующий код.

HttpContext.Current.Server.ClearError();
// Response.Headers.Clear();
HttpContext.Current.Response.Redirect("/Home/Login",false);
0 голосов
/ 01 мая 2009

Функция редиректа, вероятно, работает с использованием http-заголовка «refresh» (и, возможно, также с использованием кода 30X). После того как заголовки отправлены клиенту, сервер не может добавить эту команду перенаправления, это слишком поздно.

...