2010-01-08 6 views
5

Wenn ASP.Net Ajax zum Aufrufen von PageMethods verwenden, wie kann ich auf die HTTP-Antwortheader von der "Erfolg" -Methode zugreifen?Zugriff Antwort Header von ASP.Net PageMethod Call

Zum Beispiel:

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

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

Vielen Dank für jede Hilfe

Antwort

2

In Ihr Beispiel PageMethods.DoSomething sollte einen Rückgabewert haben, der gleich WebRequest ist, wenn es sich um einen ASP.net-Web-Service-Proxy handelt. Dies wird bereitgestellt, damit Sie die Anforderung bearbeiten können, nachdem Sie sie initiiert haben (d. H., Sie abbrechen etc.).

Mit dieser Klasse verfügen Sie über eine add_completed-Methode, mit der Sie einen Handler für den Abschluss der Webanforderung hinzufügen können. Die Signatur für den Rückruf lautet function OnWebRequestCompleted(executor, eventArgs), und der Parameter executor ermöglicht Ihnen, zusätzliche Antwortinformationen zu erhalten. Beispielsweise können Sie die Antwortheader mit executor.getAllResponseHeaders() abrufen; Dies sollte eine Zuordnung (benannte Sammlung) von Headernamen und Werten sein.

Wenn Sie also unmittelbar nach dem Aufruf der Servicemethode einen Handler zum abgeschlossenen Ereignis der Webanforderung hinzufügen, sollte es funktionieren (es gibt keinen Webdienst auf der Welt, der schneller als zwei aufeinanderfolgende Codezeilen antworten kann!).

Der vorherige Hyperlink zu WebRequest enthält ein vollständiges Beispiel dafür, wie dies funktioniert. Beachten Sie jedoch, dass dieser Code WebRequest direkt verwendet.

Asp.Net Ajax-Web-Service-Proxy-Klassen verwenden, um die WebServiceProxy Klasse, und jeder Proxy-Methode schließlich seine invoke Methode aufrufen, die die WebRequest Instanz zurückgibt.

+0

Danke Lord Zoltan. Das sind sehr hilfreiche Informationen! – James

+0

froh, von Nutzen zu sein;) –

0

Eine Web-Anfrage hat eine Header Sammlung

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

Der webrequestmanager ist ein statisches Objekt, das Sie in der Lage sein können, extrahieren Sie diese Informationen aus:

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

Ich hoffe, zwischen den beiden Links macht es Sinn: -;

Ich bin nicht recode sagen, das unbedingt zu verwenden, aber Seitenmethoden ist ein Wrapper und als solche halte ich es für Informationen von einem Web-Anfrage zugreifen würde, die von der WebRequestManager betroffen sein können ...

+0

Danke Brian. Das einzige Problem dabei ist, dass ich nicht garantieren kann, dass die Anfrage, die ich bekomme, dieselbe ist, die mit dieser Erfolgsmethode verbunden ist. Wenn mehrere asyn-Anforderungen gleichzeitig ausgeführt werden, könnte ich mit einer anderen Anfrage enden, oder die Anfrage selbst ist möglicherweise bereits beendet, wenn die Erfolgsmethode aufgerufen wird. Ich möchte wirklich eine Möglichkeit, auf die Antwortheader für diesen bestimmten Anruf zuzugreifen. Ich habe die Option, dies zu tun, wenn ich recode, um die jQuery-Bibliothek zu verwenden, um den Aufruf zu machen, aber ich möchte wirklich die .net-Bibliothek für Konsistenz verwenden. – James