Alamofire: isSuccess toujours vrai, même avec un code d'erreur

Créé le 11 oct. 2015  ·  3Commentaires  ·  Source: Alamofire/Alamofire

Le serveur envoie le code de réponse 404, mais il semble que le framework l'interprète comme un succès.

Code:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .responseJSON { response in


                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization


                let results = response.result

                if let JSON = response.result.value {

                    if response.result.isSuccess == true {
                        print("Success with JSON: \(JSON)")
                        self.tableView.hidden = false

                        self.resultsDict = results.value as! NSArray

                        let resultsNumber = results.value!.count

                        self.numberOfResults.text = "Results(\(resultsNumber))"
                        self.numberOfResults.hidden = false

                        self.resultsN = resultsNumber
                        self.loadedMode = true


                        self.tableView.reloadData()
                        self.tableView.hidden = false
                    }
                }
                    else {print("error")}

        }

isSuccess est toujours vrai, quel que soit le code renvoyé par le serveur.

question response serializer

Tous les 3 commentaires

Par défaut, Alamofire enregistre toute réponse qui passe par le sérialiseur de réponse (dans votre exemple, le JSONResponseSerializer utilisé par .responseJSON ) comme un succès. Si vous souhaitez valider le code de réponse de votre demande, ajoutez simplement un .validate() à votre chaîne de demande. Cela garantira que votre code de réponse est compris entre 200 et 299, inclus. Vous pouvez également personnaliser la validation à l'aide des méthodes décrites dans la documentation .

Dans ton cas:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .validate()
            .responseJSON { response in }

Merci, a fonctionné comme un charme!

Merci, ça marche. En utilisant .validate() la réponse est validée.
Mais il y a un autre problème, en utilisant .validate() je n'obtiens pas la valeur de réponse : response.result.value .
Existe-t-il une solution ou une solution de contournement ?
Merci

Cette page vous a été utile?
0 / 5 - 0 notes