已发送HTTP标头后无法重定向

3
当我尝试通过Response.Redirect(URL)重定向到另一个页面时,出现以下错误:- System.Web.HttpException: Cannot redirect after HTTP headers have been sent. 在调用重定向方法之前,我写了一个Response.Write("Sometext");和Response.Flush()
在这种情况下,我们如何使用Response.Redirect(URL)
我通过异步调用执行存储过程。该存储过程将花费近3分钟的时间来执行。由于此应用程序正在云计算机中运行,因此我将从服务器获得负载均衡器超时错误。为避免负载均衡器超时,我正在向浏览器写入一些文本(response.write()Flush())。

7个回答

3

在尝试发送HTTP标头之前,请确保您不写入/刷新任何内容。 发送标头后,没有适当的方法进行重定向,因为您只能执行输出JavaScript以执行重定向(不好),或者发送“meta refresh/location”标记,这很可能不在正确的位置(在HEAD内),从而导致无效的HTML。


我正在通过异步调用执行存储过程。该存储过程将需要近3分钟才能执行完毕。在此期间,由于该应用程序正在云计算机上运行,因此我将从服务器收到负载均衡器超时错误。 - Anilkumar

2

我遇到过同样的错误并且采用了同样的方法。你可以尝试使用JavaScript代替直接调用Response.Redirect。

Response.Write("<script type='text/javascript'>");
Response.Write("window.location = '" + url + "'</script>");
Response.Flush();

对我来说很好用,但我仍需要在不同的浏览器上进行检查。


1
if (!Response.IsRequestBeingRedirected)
                    Response.Redirect("~/RMSPlusErrorPage.aspx?ErrorID=" + 100, false);

0

请尝试执行以下操作:

   catch (System.Threading.ThreadAbortException)
        {
            // To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
        }
   catch (Exception e)
        {//Here you can put your context.response.redirect("page.aspx");}

完整的关于它的示例? - Kiquenet

0

你不能使用Response.Redirect,因为你已经超过了头部并且输出了“Sometext”。在向客户端写入数据或进行META重定向之前,必须检查(重定向条件)。

如果你想要一个显示文本并在5秒后重定向的页面之一,META是你的选择。


0
如果您在页面开始呈现之前重定向(例如,从页面的LoadPreRender事件重定向),则不会出现此错误。

我现在看到你的评论,你想在长时间运行的存储过程完成后进行重定向。在这种情况下,您可能需要使用不同的方法。

例如,您可以在页面上放置一个带有计时器的AJAX UpdatePanel,计时器可以每隔几秒钟检查存储过程是否已完成,然后进行重定向。

这种方法的优点是,您可以在过程运行时在页面上放置一些“正在进行中”的消息,以便用户知道事情仍在发生。


0
在我的情况下,问题的原因是滚动网格视图中加载数据需要很长时间。并且在网格视图数据没有完全加载完成之前,我就按下了重定向按钮。这就导致了错误的出现。
您可以减少数据获取量
或者
在加载完成之前防止按下重定向按钮

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接