Alamofire错误总是为零,而请求失败

时间:2015-08-08 17:38:29

标签: swift alamofire

如果是400(错误请求)或403(未经授权),我可以从响应中获取有关失败的信息,而在param中传递的错误总是为零 - 是否需要任何额外的设置?

 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.)")"什么远离有意义的失败解释...我想知道为什么我不能简单地通过AFNetworking的简单失败解释得到错误..

1 个答案:

答案 0 :(得分:3)

需要添加.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)
         }