【问题标题】:Response.AppendHeader() is brokenResponse.AppendHeader() 坏了
【发布时间】:2011-09-23 17:52:44
【问题描述】:

我正在使用

Response.AppendHeader("Refresh", "2; url=default.aspx")

在用户登录或注销后将其送回主页并且有效。但是,在联系我们页面上它失败了,这就是它所说的:

找不到资源。说明:HTTP 404。你的资源 正在寻找(或其依赖项之一)可能已被删除, 已更改名称,或暂时不可用。请查阅 以下 URL 并确保其拼写正确。

请求的 URL:/default.aspx, 2; url=default.aspx

奇怪的是,这不会发生在调试中,只会发生在实时站点上。看起来它以某种方式将标题附加了两次......我不知道。有什么想法吗?

【问题讨论】:

  • contactus 是否在另一个文件夹中,例如 /contact/contactus.aspx?如果是,请在实时站点上尝试输入url=../default.aspx(相对路径),看看是否有区别。
  • 不,default.aspx 和联系表单在同一个文件夹中。它在调试中工作......
  • 您是否使用过类似 FireBug 的工具来检查标头并确保标头传输正确?
  • 好吧,奇怪的是在注销页面上,它在标题中显示了重定向,但在提交后标题没有出现在联系页面上,但它仍然重定向到错误页面.. .

标签: .net asp.net vb.net .net-2.0


【解决方案1】:

如果联系人页面与 Default.aspx 不在同一路径中,则相对路径将不起作用。如果它向下一级,则需要为其提供绝对路径,如“../Default.aspx”。

【讨论】:

    【解决方案2】:

    我发现了它是什么。在我的 aspx 中,我有

    onclick="btnSubmit_Click" runat="server"
    

    您只需要 runat="server" 指令。 onclick 指令导致事件处理程序触发两次。

    【讨论】:

      【解决方案3】:

      一行解决方案是替换:

      Response.AppendHeader("Refresh", "2; url=default.aspx");
      

      与:

      Response.Headers["Refresh"] = "2; url=default.aspx";
      

      HTTP 404 错误的原因是由于 HTTP 响应标头中重复的“刷新”标头。它不会影响 IE,但会影响 Chrome。

      这是一个棘手的问题,只有在浏览器的开发者模式下看到 HTTP 响应标头时才能理解。

      在 ASP.NET 中,如果您使用 Server.Transfer,那么即使传输完成,地址栏中的页面名称也不会更改。例如如果您从Default.aspx 转移到Managers.aspx,那么地址栏仍然显示Default.aspx。当Response.AppendHeader 出现在Default.aspxManagers.aspx 页面上时,在传输时,标题会被添加两次到Default.aspx

      【讨论】:

        猜你喜欢
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 2017-12-14
        相关资源
        最近更新 更多