【问题标题】:ASP-Classic - how can I clear out a redirect header put there by Response.Redirect?ASP-Classic - 如何清除 Response.Redirect 放置的重定向标头?
【发布时间】:2011-03-23 18:39:16
【问题描述】:

我正在处理一个由 ASP 页面调用的已编译 VB6 对象。响应缓冲已打开。我的代码调用另一个编译的 VB 组件,它可能调用 Response.Redirect(),但继续执行并将控制权返回给我的代码。然后我可能想自己调用 Response.redirect 。但是,这似乎为header创建了一个数组,而不是覆盖之前的Url:

代码:

  Call m_oResponse.Redirect("http://google.com")
  Call m_oResponse.Redirect("http://yahoo.com")

产生的 http 响应:

 HTTP/1.1 302 Object moved
 ...
 Location: http://google.com,http://yahoo.com
 ...
 Date: Wed, 23 Mar 2011 18:14:17 GMT
 Connection: keep-alive

我尝试了 Response.Clear,但这似乎不会影响标题。

【问题讨论】:

    标签: asp-classic redirect


    【解决方案1】:

    据我所知Response.Redirect() 终止页面处理并立即进行重定向。通常,您的代码之后无法继续处理,因此您无法避免重定向。

    MSDN 说:

    任何响应正文内容,例如 显示的 HTML 文本或 Response.Write 页面中的文本由 原始 URL 被忽略。然而,这 方法确实发送其他 HTTP 标头 由本页所指示的设置 客户端的原始 URL。一个 自动响应正文包含 生成链接时重定向 URL。

    http://msdn.microsoft.com/en-us/library/ms524309.aspx

    我认为您可以让代码在之后继续执行的唯一方法是调用已编译的 COM 组件或其他一些外部进程,因为它们不会受到页面执行终止的影响。

    如果您提到的 VB 组件是一个外部组件,而不仅仅是包含在 <!--#include file="other_script.asp"--> 指令中的另一个 ASP 文件,那么它将继续执行,但您的调用 ASP 页面不会。

    【讨论】:

    • 是的,VB6 组件是一个已编译的可执行文件,正如您所说,它在将重定向标头放入响应缓冲区后继续执行。似乎没有办法清除标题。 :-(
    【解决方案2】:

    你有编译组件的源代码吗?

    即是否可以重写,而不是导致重定向本身,只是简单地返回要重定向到的 URL?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多