Как получить код состояния HTTP в обработчике ошибок HTTPService - PullRequest
4 голосов
/ 06 апреля 2010

Я вызываю метод сервера через HTTPService со стороны клиента. Сервер является веб-службой RestFul, и он может ответить одним из множества кодов ошибок HTTP (скажем, 400 для одной ошибки, 404 для другой и 409 для еще одной). Я пытался выяснить, как определить точный код ошибки, отправленный сервером. Я просмотрел все дерево объектов для FaultEvent, заполненного в моем обработчике сбоев, но нигде нет, где он сообщает мне код ошибки. Эта недостающая функциональность во Flex?

Мой код выглядит так: Объявление службы HTTP:

    <mx:HTTPService id="myServerCall" url="myService" method="GET" 
resultFormat="e4x" result="myServerCallCallBack(event)" fault="faultHandler(event)">
            <mx:request>
                <action>myServerCall</action>
                <docId>{m_sDocId}</docId>
            </mx:request>
        </mx:HTTPService>

Мой код обработчика ошибок выглядит так:

private function faultHandler(event : FaultEvent):void
{
 Alert.show(event.statusCode.toString() + " / " + event.fault.message.toString()); 
}

Ответы [ 5 ]

4 голосов
/ 03 апреля 2013

Я мог бы что-то здесь упустить, но:

event.statusCode

дает мне код состояния ответа HTTP.

Так что я могу успешно сделать что-то подобное в моей функции обработчика ошибок:

public function handleFault(faultEvent:FaultEvent):void
{
    if (faultEvent.statusCode == 401)
    {
        Alert.show("Your session is no longer valid.", "", Alert.OK, this, loginFunc);
    }
    else
    {
        Alert.show("Failed with error code: " + faultEvent.statusCode as String);
    }
}
3 голосов
/ 07 апреля 2010

Похоже, вам не повезло: http://fantastic.wordpress.com/2007/12/26/flex-is-not-friendly-to-rest/

Возможно, вам придется использовать ExternalInterface, чтобы обработать это в JS, а затем сообщить Flex.

1 голос
/ 17 декабря 2014

as3httpclient , опубликованный Россом, дружелюбен по отношению к Rest и предоставляет вам код состояния HTTP, если вы разрабатываете для AIR, а не приложение для браузера.

Я не смог заставить as3httpclient работать из браузера, даже когда делал запросы к тому же источнику.Есть документация о том, что вам нужно настроить файловый сервер политики сокетов, чтобы это работало.Не масштабируется для нашего использования, поэтому я настроил веб-сервис Proxy на том же хосте, где работает приложение flex.

Я использую HTTPService для вызова веб-службы прокси, которая перенаправляет запрос в пункт назначения, а веб-служба прокси возвращает код состояния http и тело сообщения обратно в HTTPService в xml.

1 голос
/ 20 марта 2012

Flash Player требуется помощь из браузера, чтобы получить доступ к коду статуса HTTP; следовательно, это доступно не на всех платформах. Для меня это не удалось с Flash Player 10.3.183.11 и Firefox 3.6.26, но работал с IE 8 на Windows 7.

Справка Adobe по свойству FaultEvent.statusCode намекает на это, но, к сожалению, не вдавается в подробности:

это свойство обеспечивает доступ к коду статуса ответа HTTP (если доступен), в противном случае значение равно 0

Итак, если вам абсолютно необходим код состояния, не повезло; если это просто для того, чтобы генерировать лучшее или более дружественное сообщение об ошибке для некоторых частых ошибок, этого может быть достаточно.

0 голосов
/ 15 января 2013

Попробуйте использовать это вместо HTTPService: http://code.google.com/p/as3httpclient/

...