2015-08-08 36 views
1

在400(錯誤請求)或403(未授權)的情況下,我只能從響應中獲取關於失敗的信息,而在param中傳遞的錯誤始終爲零 - 是否需要任何額外建立?Alamofire錯誤始終爲零,而請求失敗

Alamofire.request(Router.SignIn(emailField.text, passwordField.text)).response { (request, response, data, error) in 

     println(error) 
     println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
    } 

UPD:作爲mattt勸添加的Valide這樣的:

 Alamofire.request(UdacityRouter.SignIn(emailField.text, passwordField.text)).validate().response 
     in 

     println(error) 
     println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
    } 

至於結果,我收到"Optional("The operation couldn’t be completed. (com.alamofire.error error -1.)")"什麼是遠離失敗的meaningfull解釋。我不知道爲什麼我不能簡單地得到錯誤如AFNetworking所做的一個簡單的失敗解釋..

+0

您需要添加.validate()如果你想HTTP狀態代碼產生的錯誤。 – mattt

+0

謝謝,我會試試!但默認情況下添加此行爲不會更有用嗎? – alex

+0

號碼內容類型和狀態碼驗證有意地加入Alamofire。 – mattt

回答

2

由於默認情況下需要添加.validate(),Alamofire將任何已完成的請求視爲成功,而不管響應的內容如何。

從Alamofire文檔:

驗證

默認情況下,對待Alamofire任何已完成的請求是成功的, 不管響應的內容的。在 響應處理程序之前調用驗證會導致產生錯誤,如果響應的 是不可接受的狀態碼或MIME類型。

手冊驗證

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) 
     .validate(statusCode: 200..<300) 
     .validate(contentType: ["application/json"]) 
     .response { _, _, _, error in 
      println(error) 
     } 

自動驗證

自動驗證中200狀態碼... 299範圍內,並且 響應的Content-Type頭相匹配的Accept頭 該請求,如果提供了一個。

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) 
     .validate() 
     .response { _, _, _, error in 
      println(error) 
     } 
相關問題