2010-04-06 66 views
4

我從客戶端通過HTTPService調用服務器方法。該服務器是一個RestFul Web服務,它可能會響應許多HTTP錯誤代碼之一(例如,一個錯誤爲400,另一個爲404,另一個爲409)。我一直在試圖找出確定服務器發送的確切錯誤代碼的方法。我已經遍歷了我的錯誤處理程序中填充的FaultEvent的整個對象樹,但沒有告訴我錯誤代碼的位置。在Flex中這是缺少的功能?如何在HTTPService錯誤處理程序中獲取HTTP狀態碼

我的代碼如下所示: 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()); 
} 

回答

1

Flash Player需要瀏覽器的幫助才能夠訪問HTTP狀態碼;因此,這不適用於所有平臺。對我來說,Flash Player 10.3.183.11和Firefox 3.6.26失敗,但在Windows 7上與IE 8一起工作。

FaultEvent.statusCode屬性的Adobe幫助暗示了這一點,但不幸的是沒有詳細說明:

此屬性提供對HTTP響應狀態代碼(如果可用),否則該值爲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

as3httpclient張貼羅斯是友好的休息,併爲您提供的HTTP狀態代碼,只要你針對AIR開發,而不是基於瀏覽器的應用程序。

即使向同一來源提出請求,我也無法從瀏覽器獲取as3http客戶端的工作。有documentation說明你需要設置一個套接字策略文件服務器來使這個工作。對於我們的用途不可擴展,所以我在運行Flex應用程序的同一主機上設置了代理Web服務。

我使用HTTPService來調用代理Web服務,它將請求轉發到目標,代理Web服務將http狀態代碼和消息體返回到xml中的HTTPService。

+0

歡迎來到SO。我添加了as3httpclient的鏈接以供參考和易用性。 – 2014-12-16 23:12:53