Alamofire returns .Success on error HTTP status codes

后端 未结 4 1106
北海茫月
北海茫月 2020-12-29 03:16

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 l

4条回答
  •  执笔经年
    2020-12-29 03:50

    If using response, you can check the NSHTTPURLResponse parameter:

    Alamofire.request(urlString, method: .post, parameters: registrationModel.getParentCandidateDictionary(), encoding: JSONEncoding.default)
        .response { response in
            if response.response?.statusCode == 409 {
                // handle as appropriate
            }
    }
    

    By default, 4xx status codes aren't treated as errors, but you can use validate to treat it as an such and then fold it into your broader error handling:

    Alamofire.request(urlString, method: .post, parameters: registrationModel.getParentCandidateDictionary(), encoding: JSONEncoding.default)
        .validate()
        .response() { response in
            guard response.error == nil else {
                // handle error (including validate error) here, e.g.
    
                if response.response?.statusCode == 409 {
                    // handle 409 here
                }
                return
            }
            // handle success here
    }
    

    Or, if using responseJSON:

    Alamofire.request(urlString, method: .post, parameters: registrationModel.getParentCandidateDictionary(), encoding: JSONEncoding.default)
    .validate()
    .responseJSON() { response in
        switch response.result {
        case .failure:
            // handle errors (including `validate` errors) here
    
            if let statusCode = response.response?.statusCode {
                if statusCode == 409 {
                    // handle 409 specific error here, if you want
                }
            }
        case .success(let value):
            // handle success here
            print(value)
        }
    }
    

    The above is Alamofire 4.x. See previous rendition of this answer for earlier versions of Alamofire.

提交回复
热议问题