如何在HTTPService错误处理程序中获取HTTP状态代码

时间:2010-04-06 05:58:11

标签: actionscript-3 flex flex3

我从客户端通过HTTPService调用服务器方法。服务器是RestFul Web服务,它可能会响应许多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 个答案:

答案 0 :(得分:4)

我可能在这里遗漏了一些东西,但是:

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);
    }
}

答案 1 :(得分:3)

看起来你运气不好:http://fantastic.wordpress.com/2007/12/26/flex-is-not-friendly-to-rest/

您可能必须使用ExternalInterface在JS中处理此问题,然后将其传达给Flex。

答案 2 :(得分:1)

Flash Player需要浏览器的帮助才能访问HTTP状态代码;因此,并非所有平台都提供此功能。对我来说,它在Flash Player 10.3.183.11和Firefox 3.6.26中失败了,但在Windows 7上使用IE 8。

FaultEvent.statusCode属性的Adobe帮助暗示了这一点,但遗憾的是没有详细说明:

  

此属性提供对HTTP响应状态代码(如果可用)的访问,否则值为0

所以,如果你绝对需要状态代码,运气不好;如果它只是为某些频繁的错误条件生成更好或更友好的错误消息,那么它就足够了。

答案 3 :(得分:1)

Ross发布的

as3httpclient对Rest友好,并为您提供HTTP状态代码,只要您为AIR而不是基于浏览器的应用程序开发。

即使向同一个来源发出请求,我也无法从浏览器中获取as3httpclient。有documentation表示您需要设置套接字策略文件服务器才能使其正常工作。我们的用途不具备可扩展性,因此我在运行Flex应用程序的同一主机上设置了代理Web服务。

我使用HTTPService来调用代理Web服务,代理Web服务将请求转发到目标,代理Web服务将http状态代码和消息正文返回给xml中的HTTPService。

答案 4 :(得分:0)

尝试使用此代替HTTPService: http://code.google.com/p/as3httpclient/