Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alamofire returns .Success on error HTTP status codes

I have a pretty simple scenario that I'm struggling with. I'm using Alamofire to register a user on a rest API. The first call to register is successful and the user can log in. The second call, when trying to register with the same email address should result in a HTTP status code 409 from the server. Alamofire, however, returns a .Success with an empty request and response. I have tested this this API with postman and it correctly returns a 409.

Why is Alamofire not returning .Failure(error), where the error has status code info etc?

Here is the call I run with the same input each time.

Alamofire.request(.POST, "http://localhost:8883/api/0.1/parent", parameters: registrationModel.getParentCandidateDictionary(), encoding: .JSON).response(completionHandler: { (req, res, d, e) -> Void in         print(req, res, d, e)     }) 
like image 854
Craigt Avatar asked Jan 12 '16 07:01

Craigt


1 Answers

From the Alamofire manual:

Validation

By default, Alamofire treats any completed request to be successful, regardless of the content of the response. Calling validate before a response handler causes an error to be generated if the response had an unacceptable status code or MIME type.

You can manually validate the status code using the validate method, again, from the manual:

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

Or you can semi-automatically validate the status code and content-type using the validate with no arguments:

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])      .validate()      .responseJSON { response in          switch response.result {          case .success:              print("Validation Successful")          case .failure(let error):              print(error)          }      } 
like image 114
David Berry Avatar answered Oct 09 '22 01:10

David Berry