Alamofire: isSuccess всегда верно, даже с кодом ошибки

Созданный на 11 окт. 2015  ·  3Комментарии  ·  Источник: Alamofire/Alamofire

Сервер отправляет ответ с кодом 404, но похоже, что структура интерпретирует это как успешное.

Код:

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 всегда истинно, независимо от кода, который сервер отправляет обратно.

question response serializer

Все 3 Комментарий

По умолчанию Alamofire регистрирует любой ответ, который проходит через сериализатор ответов (в вашем примере JSONResponseSerializer используется .responseJSON ) как успешный. Если вы хотите проверить код ответа на свой запрос, просто добавьте .validate() в свою цепочку запросов. Это гарантирует, что ваш код ответа будет от 200 до 299 включительно. Вы также можете настроить проверку, используя методы, описанные в документации .

В твоем случае:

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

Спасибо, сработало как шарм!

Спасибо, сработало. С помощью .validate() ответ проверяется.
Но есть еще одна проблема: используя .validate() я не получаю значение ответа: response.result.value .
Есть ли какое-нибудь решение или обходной путь?
Спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги