2010-01-08 53 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

相關問題