2011-03-23 31 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重定向到?

相關問題