当我调用时,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()的一种方法是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)在执行任何其他操作之前执行重定向,或者b)Response.Buffer = true
在执行任何其他操作之前尝试使用,以确保在整个页面执行完毕之前不会向客户端发送任何输出.
只有在HTTP消息中的第一行是"重定向"时才会发生重定向HTTP/1.x 3xx Redirect Reason
"时.
如果你已经调用Response.Write()
或设置了一些标题,那么重定向就太晚了.您可以尝试Response.Headers.Clear()
在重定向之前调用以查看是否有帮助.