2010-01-08 3 views
5

При использовании ASP.Net Ajax для вызова PageMethods, как я могу получить доступ к заголовкам ответа Http из метода «success»?Access Response Headers из ASP.Net PageMethod Call

Например:

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. Это обеспечивается, чтобы вы могли манипулировать запросом после его запуска (т. Е. Отменить его и т. Д.).

С помощью этого класса у вас есть метод add_completed, который вы можете использовать для добавления обработчика для завершения веб-запроса. Подпись для обратного вызова - function OnWebRequestCompleted(executor, eventArgs), а параметр executor позволяет получить дополнительную информацию об ответе. Например, вы можете получить заголовки ответов с помощью executor.getAllResponseHeaders(); который должен быть картой (названной коллекцией) имен заголовков и значений.

Итак, если вы добавили обработчик к завершенному событию веб-запроса сразу после вызова метода службы, он должен работать (в мире нет веб-службы, которая может реагировать быстрее, чем две последовательные строки кода!).

Предыдущая гиперссылка на WebRequest содержит полный пример того, как это сделать. Обратите внимание, однако, что этот код напрямую использует WebRequest.

Прокси-классы Asp.Net Ajax Web-класса используют класс WebServiceProxy, и каждый прокси-метод в конечном итоге вызывает свой метод invoke, который возвращает экземпляр WebRequest.

+0

Спасибо, лорд Золтан. Это очень полезная информация! – James

+0

рад быть полезным;) –

0

запрос Веб имеет набор заголовков

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

webrequestmanager представляет собой статический объект, который вы можете быть в состоянии извлечение этой информации от:

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

Надеюсь, между двумя звеньями это имеет смысл: -;

Я не говорю, перекодировать, чтобы использовать это обязательно, но методы страница является оболочкой и, таким образом, я думаю, что доступ к информации из веб-запроса, который может пострадать от WebRequestManager ...

+0

Спасибо Брайан. Единственная проблема заключается в том, что я не могу гарантировать, что запрос, который я получаю, тот же, который связан с этим методом успеха. В нем много запросов asyn, которые происходят сразу, я мог бы получить другой запрос, или сам запрос может даже завершиться к моменту вызова метода success. Я действительно хочу получить доступ к заголовкам ответов для этого конкретного вызова. У меня есть возможность сделать это, если я перекодирую использование библиотеки jQuery для выполнения вызова, но я действительно хотел бы использовать библиотеку .net для обеспечения согласованности. – James

Смежные вопросы