对于我希望将 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")
}
如果这不能证明您的用例,那么请提供一个不同的示例来复制您所看到的行为。 我们在JSON 序列化程序中有自定义 204 处理,这应该确保您在使用responseJSON
序列化程序时收到.Success
案例。
我将暂时关闭这个问题。 如果您提供更多信息让我们相信 Alamofire 中可能存在问题,我们将很乐意重新开放并进一步调查。
干杯。 🍻
嘿@borek2你能确保你的 api 不发送内容长度标头然后为零吗,我在里面挖了 3 天后遇到了同样的问题,我找到了解决方案
问题
实际问题是我的 api 发送内容长度标头,其值为 grater 然后 0 作为响应,因此 Alamofire 检查内容长度,他发现 ohh 有内容长度 grater 然后为零,所以我需要读取响应数据,以便 Alamofire 读取它和服务器不返回任何内容并且发生超时服务器不返回任何内容并且 Alamofire 尝试读取响应
解决方案
确保 api 在状态代码为 204 时不返回内容长度标头值大于 0
@cnoon我们还需要更改 Alamofire 处理 204 请求代码的逻辑,因为我们将要读取数据,但上面的情况在 204 中没有任何响应数据,因此如果响应代码是204 没有内容
干杯。 🍻
感谢@indrajitsinh的建议! 在 alamofire 更新后,我不再遇到这个问题,但是当我再次遇到问题时,我会记住您的建议。 感谢回复!
最有用的评论
嘿@borek2你能确保你的 api 不发送内容长度标头然后为零吗,我在里面挖了 3 天后遇到了同样的问题,我找到了解决方案
问题
实际问题是我的 api 发送内容长度标头,其值为 grater 然后 0 作为响应,因此 Alamofire 检查内容长度,他发现 ohh 有内容长度 grater 然后为零,所以我需要读取响应数据,以便 Alamofire 读取它和服务器不返回任何内容并且发生超时服务器不返回任何内容并且 Alamofire 尝试读取响应
解决方案
确保 api 在状态代码为 204 时不返回内容长度标头值大于 0
@cnoon我们还需要更改 Alamofire 处理 204 请求代码的逻辑,因为我们将要读取数据,但上面的情况在 204 中没有任何响应数据,因此如果响应代码是204 没有内容
干杯。 🍻