2010-01-08 23 views
5

当使用ASP.Net Ajax调用PageMethods时,如何从“成功”方法访问Http响应头?来自ASP.Net的访问响应头PageMethod调用

例如:

PageMethods.DoSomething(
    function(result){successMethod(result)}, 
    function(error){errorMethod(error)} 
); 

function successMethod(result){ 
    //------how can I access the Http response headers from here? ------ 
} 

感谢所有帮助

回答

2

在你的例子,PageMethods.DoSomething应该有一个返回值等于WebRequest,如果它是一个asp.net的Web服务代理。这是提供的,以便您可以在启动它后处理请求(即取消它等)。

在这个类中,您有一个add_completed方法,您可以使用它为Web请求完成时添加处理程序。此回调的签名为function OnWebRequestCompleted(executor, eventArgs),并且此参数中的executor参数可让您获取额外的响应信息。例如,您可以使用executor.getAllResponseHeaders()获取响应标题;它应该是标题名称和值的映射(命名集合)。

因此,如果您在调用服务方法后立即向Web请求的已完成事件添加处理程序,它应该可以工作(世界上没有任何Web服务可以比两个连续的代码行更快地响应)。

以前的超链接WebRequest包含了一个完整的例子,说明如何连接它。但请注意,此代码直接使用WebRequest。

Asp.Net Ajax Web服务代理类使用WebServiceProxy类,每个代理方法最终调用其invoke方法,该方法返回WebRequest实例。

+0

谢谢佐尔坦勋爵。这是非常有用的信息! – James 2010-01-11 20:00:04

+0

很高兴可以使用;) – 2010-01-11 21:14:42

0

Web请求有一个头集合

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

的webrequestmanager是一个静态对象,您可能能够摘自:

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

希望在两个链接之间有意义: - ;

我不是说重新编码,以一定用这个,但页面方法是一个包装,因此我认为它会从一个网络请求,这可以从WebRequestManager影响获取信息......

+0

谢谢Brian。唯一的问题是,我不能保证我得到的请求是与成功方法相关的请求。有很多异步请求同时发生,我可能会得到一个不同的请求,或者在成功方法被调用时,请求本身甚至可能已经完成。我真的想要一种方式来访问该特定调用的响应头。 我可以选择这样做,如果我重新编码使用jQuery库进行调用,但我真的想使用.net库的一致性。 – James 2010-01-11 19:58:15

相关问题