2013-07-28 95 views
2

我有一個大公司。網站與混合經典的asp和asp.net目前託管與Win 2003服務器,IIS 6.使用集成管道時,經典的ASP Request.Form不工作

我需要修改所有頁面輸出與一些html修改,無論他們來自哪裏的世界。 這個asp部分很老,結構也很糟糕,因此我不能採取任何一種「普遍包含」來應用我們需要的所有更改。最後,一些asp頁面輸出來自多個OCX/COM對象的代碼... 我們已經在計劃將整個重寫/遷移到.net,但不幸的是這是一個長期項目,我不能儘快完成。

所以我想(並測試)將其遷移到Win 2008 R2,IIS 7.5並利用集成管道模式,我可以使用.net httpmodule修改所有輸出。 一切工作正常:我可以正確地「注入」通過asp和asp.net呈現的頁面的html代碼,但是當傳統的asp頁面處理通過post發送的表單數據時(x-www-form- urlencoded)模塊。

看來,經典的ASP它使用集成管道模式時丟失了Request.Form對象,在每次使用時拋出錯誤'80004005'; Request.QueryString,而不是它正常工作。

我不會切換回經典管道模式,因爲我將失去修改經典ASP呈現的頁面的好處。在這裏使用Isapi過濾器是一場噩夢,我不會朝這個方向前進。

有誰知道任何解決辦法得到的Request.Form傳統的ASP工作時,綜合管線模式被激活 - 或 - 任何方式修改最終呈現的頁面輸出採用經典的管道,所以我可以修改它時,從傳統的ASP來與.net代碼發送給瀏覽器之前?

感謝您的幫助, Squiffy

編輯:不幸的是,我們沒有找到一個解決這個問題。與此同時,我們從零開始使用現代解決方案徹底重建了網站(耶!)。謝謝大家的幫助!

+0

只使用'Request(「formElement」)'工作嗎? –

+0

另外,你可以發佈什麼URL(或至少主機名)的樣子?而且 - 這是否發生在任何瀏覽器? –

+0

嗨,Request(「formElement」)也失敗了,老實說所有的代碼都是這樣寫的。 – Squiffy

回答

1

我認爲這是因爲您在http模塊中使用了Request.Form。根據我的實驗,Request.Form在asp中以集成模式工作,除非在處理asp代碼之前從模塊訪問它。在這種情況下,建議在IIS forums上使用HttpServerUtility.TransferRequest。 您可以使用

const string dontTransferKey = "DONT_TRANSFER_MODULE"; 
    if (HttpContext.Current.Request.Headers[dontTransferKey] != null) 
     return; 

    ...............all your http module logic. use Request.Form................... 

    HttpContext.Current.Request.Headers.Add(dontTransferKey, "true"); 
    HttpContext.Current.Server.TransferRequest(HttpContext.Current.Request.Url.AbsolutePath, true); 

有此解決方案的幾個缺點:如果你使用一個以上的HTTP模塊,您需要確保它們是冪等。對於第三方模塊,這可能會非常困難。

0

不知道你是否使用Glimpse,但如果你是,我只是花了一天的時間試圖找出爲什麼突然間我的經典ASP Request.Forms失敗。長話短說:我瞥見配置註釋掉以下行下:

<add type="Glimpse.Core.Policy.AjaxPolicy, Glimpse.Core" /> 

添加到忽略類型解決我的問題,早。我現在可以在Classic ASP中訪問Request.Form/Request(「field」)。順便說一下,我正在使用集成模式。

希望這節省了我今天花費的時間...

0

只是把它放在那裏,你嘗試過「Request.Item()」嗎?