Para uma solicitação que eu espero que um 204 (Sem conteúdo) seja retornado como um código de status, Alamofire infere isso como um erro. Ele retorna um erro que tem o mesmo código de status de uma solicitação que atinge o tempo limite.
O seguinte código foi usado (uso muito básico de Alamofire)
alamofireManager.request(request)
.validate(statusCode: 200..<400)
.responseJSON(options: .AllowFragments) { (response: Response<AnyObject, NSError>) in
handleAlamofireResponse(response)
}
Olá @ borek2 ,
Acabei de criar um teste verificando se tudo está funcionando conforme o esperado.
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")
}
Se isso não demonstrar seu caso de uso, forneça um exemplo diferente que replique o comportamento que você está vendo. Temos manipulação 204 customizada no serializador JSON que deve garantir que você receba uma caixa .Success
ao usar o serializador responseJSON
.
Vou encerrar esse problema por enquanto. Se você fornecer mais informações que nos levem a acreditar que pode haver um problema no Alamofire, será um prazer reabrir e investigar mais detalhadamente.
Saúde. 🍻
Ei @ borek2 você pode ter certeza de que sua API não envia ralador de cabeçalho de comprimento de conteúdo e zero? Tive o mesmo problema depois de cavar 3 dias nele encontrei a solução
Problema
o problema real é que minha API está enviando cabeçalho de comprimento de conteúdo com valor ralador e depois 0 como resposta, então Alamofire verifica o comprimento do conteúdo e ele descobre que ohh há ralador de comprimento de conteúdo então zero, então eu preciso ler os dados de resposta, então Alamofire vai ler e o servidor não retorna nada e ocorre o tempo limite. O servidor não retorna nada e o Alamofire está tentando ler a resposta
Solução
certifique-se de que api não retorne o valor do cabeçalho de comprimento de conteúdo maior do que 0 quando o código de status for 204
@ meia-noite , também precisamos mudar a lógica de como o Alamofire lida com o código de solicitação 204 porque vamos ler os dados, mas caso como o acima não tenha nenhum dado de resposta em 204, então não temos que ler os dados se o código de resposta for 204 sem conteúdo
Saúde. 🍻
Obrigado pela sugestão @indrajitsinh ! Depois de uma atualização do alamofire, não tive mais o problema, mas me lembrarei da sua sugestão quando tiver problemas novamente. Obrigado por responder!
Comentários muito úteis
Ei @ borek2 você pode ter certeza de que sua API não envia ralador de cabeçalho de comprimento de conteúdo e zero? Tive o mesmo problema depois de cavar 3 dias nele encontrei a solução
Problema
o problema real é que minha API está enviando cabeçalho de comprimento de conteúdo com valor ralador e depois 0 como resposta, então Alamofire verifica o comprimento do conteúdo e ele descobre que ohh há ralador de comprimento de conteúdo então zero, então eu preciso ler os dados de resposta, então Alamofire vai ler e o servidor não retorna nada e ocorre o tempo limite. O servidor não retorna nada e o Alamofire está tentando ler a resposta
Solução
certifique-se de que api não retorne o valor do cabeçalho de comprimento de conteúdo maior do que 0 quando o código de status for 204
@ meia-noite , também precisamos mudar a lógica de como o Alamofire lida com o código de solicitação 204 porque vamos ler os dados, mas caso como o acima não tenha nenhum dado de resposta em 204, então não temos que ler os dados se o código de resposta for 204 sem conteúdo
Saúde. 🍻