2012-09-11 107 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的路径。