Ошибка Alamofire всегда равна нулю, а запрос не выполняется

В случае 400 (неверный запрос) или 403 (неавторизованный) я могу получить информацию о сбое только из ответа, в то время как ошибка, переданная в параметре, всегда равна нулю - нужны ли дополнительные настройки?

 Alamofire.request(Router.SignIn(emailField.text, passwordField.text)).response { (request, response, data, error)  in

        println(error)
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    }

UPD: по совету Мэтта добавил валид так:

        Alamofire.request(UdacityRouter.SignIn(emailField.text, passwordField.text)).validate().response
       in

        println(error)
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    }

В результате я получил "Optional("The operation couldn’t be completed. (com.alamofire.error error -1.)")" Что далеко от осмысленного объяснения сбоя.. Интересно, почему я не могу просто получить ошибку с простым объяснением сбоя, как это делает AFNetworking..


person alex    schedule 08.08.2015    source источник
comment
Вам нужно добавить .validate(), если вы хотите, чтобы коды состояния HTTP вызывали ошибки.   -  person mattt    schedule 09.08.2015
comment
спасибо, попробую! но не будет ли полезнее добавить это поведение по умолчанию?   -  person alex    schedule 09.08.2015
comment
Нет. Проверка Content-Type и Status Code специально включена в Alamofire.   -  person mattt    schedule 10.08.2015


Ответы (1)


Необходимо добавить .validate(), потому что по умолчанию Alamofire считает любой завершенный запрос успешным, независимо от содержания ответа.

Из документации Alamofire:

Проверка

По умолчанию Alamofire рассматривает любой завершенный запрос как успешный, независимо от содержания ответа. Вызов проверки перед обработчиком ответа приводит к генерации ошибки, если ответ имеет недопустимый код состояния или тип MIME.

Проверка вручную

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

Автоматическая проверка

Автоматически проверяет код состояния в диапазоне 200...299 и соответствие заголовка Content-Type ответа заголовку Accept запроса, если он предоставлен.

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
         .validate()
         .response { _, _, _, error in
             println(error)
         }
person Alexey Pichukov    schedule 19.08.2015