2012-09-11 129 views
2

任何人都可以告訴我是否可以將Response對象從傳統asp傳遞到C#類庫,如果可以的話是如何實現的。如何將傳統ASP響應對象傳遞給C#DLL

我在ASP中使用C#2010 Express和JScript,但我會採用VBScript答案。

或者,如果有另一種方式從dll輸出到經典asp頁面的http上下文,那也可以。

我以爲它無法完成,因爲System.Web.HttpResponse對象似乎無法從類庫中獲得。

謝謝你的回覆。通過對別人可能有同樣的問題,一個完整的答案的方式,下面是一些示例代碼:

public string passObj(ASPTypeLibrary.Response r) 
{ 
    r.Write("text from DLL"); 
    return "OK"; 
} 

和對事物的傳統的ASP方面:

var x = Server.CreateObject("dllTest.test"); 
x.passObj(Response); 
+0

整個對象,或者它只是一些部分,像查詢字符串? – tomfanning

+0

整個對象,我想在我的dll中使用它輸出到http上下文 – Graham

回答

6

要訪問包括Response的傳統ASP對象,可以在C#項目中將COM引用添加到「Microsoft Active Server Pages Object Library」。

然後,您可以從C#作爲參考吧:

ASPTypeLibrary.Response 
+0

所以這將是調用ASP頁面使用的相同的響應對象,如果不是它有什麼區別? – Graham

+0

看來我可以通過它作爲一個ASPTypeLibrary.Response然後使用在IResponse接口中找到的方法,或者我可以這樣做:ASPTypeLibrary.Response response =(ASPTypeLibrary.Response)ContextUtil.GetNamedProperty(「Response」); – Graham

1

響應對象是COM object that supports IUnknown and IDispatch。因此,您可以將它作爲對象傳遞給方法,並使用反射調用屬性。

從我自己的機器上看,IReponse IID{D97A6DA4-D5F5-4763-9BE5-60126DD39E43} Typelib UUID是{A79CBB28-1006-4227-BE61-CBEE2520C353}。如果您打開regedit並導航至HKEY_CLASSES_ROOT\TypeLib\{A79CBB28-1006-4227-BE61-CBEE2520C353}\2.0\0\win32,那麼默認密鑰將包含可導入的用於創建互操作程序集的Typelib的路徑。