Я пытаюсь выполнить перенаправление HTTP 302, но получаю следующее исключение, когда работаю в режиме отладки.

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

var response = HttpContext.Current.Response; 
response.Clear(); 
response.Status = "302 Found";
response.AddHeader("Location", "http://google.com"); 
response.End();
response.Flush();

Короче говоря, этот вызов не сбрасывает ответ и не перенаправляет.

Как я могу заставить это работать?

8
DarthVader 29 Авг 2011 в 21:39

2 ответа

Лучший ответ

Вы не должны вызывать одновременно End и Flush таким образом - для перенаправления с HTTP 302 вы должны использовать HttpContext.Current.Response.Redirect см. http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

9
Yahia 29 Авг 2011 в 17:45

У объекта HttpResponse есть метод для выполнения 302 редиректа.

Response.Redirect("page.aspx") 

Хотя ваш код должен работать нормально, поскольку это обычный способ реализации 301 redirect.

Обратите внимание, что response.Flush() является избыточным, поскольку буфер ответа сбрасывается для клиента, и выполнение завершится на response.End(), поэтому эта строка не будет выполняться.

Поиск в Google других пользователей с аналогичными проблемами указывает на эту статью базы знаний http://support.microsoft.com/kb/312629/EN-US/, что, вероятно, быть причиной ваших проблем.

6
Chris Diver 29 Авг 2011 в 18:04