HTTP标头发送后无法重定向

时间:2010-05-20 05:29:50

标签: c# asp.net

当我尝试通过Response.Redirect(URL)重定向到另一个网页时出现以下错误: - System.Web.HttpException: Cannot redirect after HTTP headers have been sent.

我写了一个Response.Write("Sometext");和Response.Flush()之前调用重定向方法。

在这种情况下,我们如何使用Response.Redirect(URL)

我正在通过Asynch调用执行存储过程。 SP将花费近3分钟来执行。到那时我将从服务器获得负载均衡器超时错误,因为此应用程序在云计算机中运行。为了避免负载均衡器超时,我正在向浏览器(response.write()Flush())写一些文本。

7 个答案:

答案 0 :(得分:3)

在尝试发送HTTP标头之前,您需要确保不要写/刷新任何。 发送标题后, 没有正确的方法 进行重定向,因为您可以做的唯一事情就是输出JavaScript来执行重定向(错误)或发送'元刷新/ location'标签很可能不在正确的位置(在HEAD内),从而导致无效的html。

答案 1 :(得分:2)

我有同样的错误和相同的方法。您可能想尝试使用javascript而不是直接调用Response.Redirect。

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

我工作得很好但是我还需要在不同的浏览器上查看它。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

如果您希望其中一个页面显示文本并在5秒后重定向,则META是您的选择。

答案 4 :(得分:0)

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


我现在在您的评论中看到,您希望在长时间运行的存储过程完成后重定向。在这种情况下,您可能必须使用不同的方法。

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

此方法还有一个优点,即您可以在页面上放置一些“进行中”消息,同时程序正在运行,因此您的用户会知道事情仍在发生。

答案 5 :(得分: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");}

答案 6 :(得分:0)

在我的情况下,问题的原因是在滚动网格视图中加载数据需要很长时间。并且在gridview数据未完全加载之前,我按下重定向按钮。我收到了这个错误。

您可以减少数据获取

在加载完成之前阻止按下重定向按钮