Sam*_*ham 81 asp.net response.redirect httpexception http-headers
当我调用时,Response.Redirect(someUrl)我得到一个HttpException:"在发送HTTP头之后无法重定向".
为什么我这样做?我该如何解决这个问题?
Sam*_*ham 116
根据MSDN文档Response.Redirect(string url),当"在发送HTTP头之后尝试重定向"时,它将抛出HttpException.由于Response.Redirect(string url)使用Http"Location"响应头(http://en.wikipedia.org/wiki/HTTP_headers#Responses),调用它将导致头文件被发送到客户端.这意味着如果你第二次调用它,或者如果你在以其他方式发送标题后调用它,你将得到HttpException.
防止多次调用Response.Redirect()的一种方法是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");
Phi*_*eck 17
一旦您将任何内容发送到客户端,HTTP标头就已经发送过了.一个Response.Redirect()呼叫通过发送中,使浏览器请求一个不同的URL头的特殊信息.  
由于标题已经发送,asp.net无法做你想要的(修改标题)
您可以通过以下方式来解决这个问题:a)在执行任何其他操作之前执行重定向,或者b)Response.Buffer = true在执行任何其他操作之前尝试使用,以确保在整个页面执行完毕之前不会向客户端发送任何输出.
只有在HTTP消息中的第一行是"重定向"时才会发生重定向HTTP/1.x 3xx Redirect Reason "时.
如果你已经调用Response.Write()或设置了一些标题,那么重定向就太晚了.您可以尝试Response.Headers.Clear()在重定向之前调用以查看是否有帮助.
| 归档时间: | 
 | 
| 查看次数: | 112040 次 | 
| 最近记录: |