繁体   English   中英

发送HTTP标头后无法重定向

[英]Cannot redirect after HTTP headers have been sent

当我尝试通过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() )。

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

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

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

与我一起工作正常,但是我仍然需要在其他浏览器上进行检查。

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

尝试执行以下操作:

   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");}

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

如果您想要其中一个页面显示文本并在5s META之后重定向,则可以选择。

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


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

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

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

以我为例,问题的原因是在滚动gridview中加载数据花费了很长时间。 并且在gridview数据没有完全加载之前,但是我按下了重定向按钮。 我得到这个错误。

您可以减少数据获取

要么

在加载完成之前,防止按重定向按钮

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM