当前位置:  开发笔记 > 编程语言 > 正文

当我调用Response.Redirect()时,为什么会在"发送HTTP标头后无法重定向"?

如何解决《当我调用Response.Redirect()时,为什么会在"发送HTTP标头后无法重定向"?》经验,为你挑选了3个好方法。

当我调用时,Response.Redirect(someUrl)我得到一个HttpException:"在发送HTTP头之后无法重定向".

为什么我这样做?我该如何解决这个问题?



1> Samuel Meach..:

根据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");


使您的属性静态是一个危险的解决方案

2> Philip Rieck..:

一旦您将任何内容发送到客户端,HTTP标头就已经发送过了.一个Response.Redirect()呼叫通过发送中,使浏览器请求一个不同的URL头的特殊信息.

由于标题已经发送,asp.net无法做你想要的(修改标题)

您可以通过以下方式来解决这个问题:a)在执行任何其他操作之前执行重定向,或者b)Response.Buffer = true在执行任何其他操作之前尝试使用,以确保在整个页面执行完毕之前不会向客户端发送任何输出.



3> Mark Cidade..:

只有在HTTP消息中的第一行是"重定向"时才会发生重定向HTTP/1.x 3xx Redirect Reason "时.

如果你已经调用Response.Write()或设置了一些标题,那么重定向就太晚了.您可以尝试Response.Headers.Clear()在重定向之前调用以查看是否有帮助.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有