Alamofire: isSuccess sempre verdadeiro, mesmo com código de erro

Criado em 11 out. 2015  ·  3Comentários  ·  Fonte: Alamofire/Alamofire

O servidor está enviando o código de resposta 404, mas parece que a estrutura está interpretando isso como um sucesso.

Código:

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 é sempre verdadeiro, qualquer que seja o código que o servidor está enviando de volta.

question response serializer

Todos 3 comentários

Por padrão, o Alamofire registra qualquer resposta que passe pelo serializador de resposta (em seu exemplo, o JSONResponseSerializer usado por .responseJSON ) como um sucesso. Se você deseja validar o código de resposta de sua solicitação, basta adicionar .validate() à sua cadeia de solicitação. Isso garantirá que seu código de resposta esteja entre 200 e 299, inclusive. Você também pode personalizar a validação usando os métodos descritos na documentação .

No seu caso:

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

Obrigado, funcionou como um encanto!

Obrigado, funcionou. Usando .validate() a resposta é validada.
Mas há outro problema, usando .validate() não obtenho o valor de resposta: response.result.value .
Existe alguma solução ou solução alternativa?
Obrigado

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

filippovdev picture filippovdev  ·  3Comentários

matthijsotterloo picture matthijsotterloo  ·  3Comentários

yokesharun picture yokesharun  ·  3Comentários

hengchengfei picture hengchengfei  ·  3Comentários

zhouhao27 picture zhouhao27  ·  3Comentários