Для запроса, который, как я ожидаю, будет возвращен 204 (Нет содержимого) в качестве кода состояния, Alamofire вместо этого считает это ошибкой. Он возвращает ошибку, которая имеет тот же код состояния, что и запрос, время ожидания которого истекло.
Был использован следующий код (очень простое использование Alamofire)
alamofireManager.request(request)
.validate(statusCode: 200..<400)
.responseJSON(options: .AllowFragments) { (response: Response<AnyObject, NSError>) in
handleAlamofireResponse(response)
}
Привет @ borek2 ,
Я только что создал тест, проверяющий, что все работает должным образом.
func testDeleteWith204ResponseStatusCode() {
let expectation = expectationWithDescription("204 should succeed")
Alamofire.request(.DELETE, "https://httpbin.org/status/204")
.validate(statusCode: 200..<400)
.responseJSON(options: .AllowFragments) { response in
print(response.response)
print(response)
expectation.fulfill()
}
waitForExpectationsWithTimeout(timeout, handler: nil)
print("Yay...204 works as expected with responseJSON serializer")
}
Если это не демонстрирует ваш вариант использования, представьте другой пример, который воспроизводит наблюдаемое вами поведение. У нас есть настраиваемая обработка 204 в сериализаторе JSON, которая должна гарантировать, что вы получите регистр .Success
при использовании сериализатора responseJSON
.
Я сейчас закрываю этот вопрос. Если вы предоставите дополнительную информацию, которая заставит нас поверить в то, что в Alamofire может быть проблема, мы с радостью откроем ее повторно и займемся дальнейшим расследованием.
Ваше здоровье. 🍻
эй @ borek2, можете ли вы убедиться, что ваш api не отправляет терку заголовка длины содержимого, а затем ноль, у меня была такая же проблема после того, как я копал в ней 3 дня, я нашел решение
Проблема
Фактическая проблема заключается в том, что мой api отправляет заголовок длины содержимого с теркой значения, затем 0 в качестве ответа, поэтому Alamofire проверяет длину содержимого, и он обнаруживает, что, о, есть терка длины содержимого, а затем ноль, поэтому мне нужно прочитать данные ответа, чтобы Alamofire собирался читать это, и сервер ничего не возвращает, и произошел тайм-аут. Сервер ничего не возвращает, и Alamofire пытается прочитать ответ
Решение
убедитесь, что api не возвращает значение заголовка длины содержимого, а затем 0, когда код состояния равен 204
@cnoon, нам также нужно изменить логику того, как Alamofire обрабатывает код запроса 204, потому что мы собираемся читать данные, но в случае, подобном приведенному выше, нет данных ответа в 204, поэтому нам не нужно читать данные, если код ответа 204 нет содержимого
Ваше здоровье. 🍻
Спасибо за предложение @indrajitsinh ! После обновления alamofire у меня больше не было проблемы, но я запомню ваше предложение, когда у меня снова возникнут проблемы. Спасибо за ответ!
Самый полезный комментарий
эй @ borek2, можете ли вы убедиться, что ваш api не отправляет терку заголовка длины содержимого, а затем ноль, у меня была такая же проблема после того, как я копал в ней 3 дня, я нашел решение
Проблема
Фактическая проблема заключается в том, что мой api отправляет заголовок длины содержимого с теркой значения, затем 0 в качестве ответа, поэтому Alamofire проверяет длину содержимого, и он обнаруживает, что, о, есть терка длины содержимого, а затем ноль, поэтому мне нужно прочитать данные ответа, чтобы Alamofire собирался читать это, и сервер ничего не возвращает, и произошел тайм-аут. Сервер ничего не возвращает, и Alamofire пытается прочитать ответ
Решение
убедитесь, что api не возвращает значение заголовка длины содержимого, а затем 0, когда код состояния равен 204
@cnoon, нам также нужно изменить логику того, как Alamofire обрабатывает код запроса 204, потому что мы собираемся читать данные, но в случае, подобном приведенному выше, нет данных ответа в 204, поэтому нам не нужно читать данные, если код ответа 204 нет содержимого
Ваше здоровье. 🍻