2011-03-23 57 views
2

我正在使用由ASP页面调用的已编译的VB6对象。响应缓冲开启。我的代码调用另一个编译的VB组件,该组件可能调用Response.Redirect(),但继续执行并将控制权返回给我的代码。然后我可能想自己调用Response.redirect。然而,这似乎是创建一个数组的头,而不是覆盖前面的网址:ASP-Classic - 如何清除通过Response.Redirect放置的重定向头?

代码:

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,但这似乎不会影响标头。

回答

1

据我所知Response.Redirect()终止页面的处理并立即执行重定向。通常,您的代码无法继续处理,因此您无法做任何事情来避免重定向。

MSDN说:

任何响应主体的内容,如 显示在由 原始URL对应的网页HTML文本或回复于 文本被忽略。但是,此 方法确实会将其由此页面设置的其他HTTP标头 通过 原始URL指示给客户端。生成一个包含 重定向URL作为链接的自动响应主体 。

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

我认为你可以得到的代码继续事后执行将调用编译的COM组件或其他一些外部的工艺中不会被页面执行时被影响的唯一途径终止。

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

+0

是的,VB6组件是一个编译好的可执行文件,正如您所说,它将重定向头放入Response缓冲区后继续执行。似乎没有办法清除标题。 :-( – 2011-03-24 18:56:30

0

你有编译组件的来源吗?

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