2015-08-08 74 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) 
     } 
相关问题