gpt4 book ai didi

swift - Alamofire:网络错误与无效状态代码?

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:32 25 4
gpt4 key购买 nike

使用 Alamofire 4/Swift 3 如何区分由于以下原因而失败的请求:

  1. 网络连接(主机宕机,无法连接到主机)对比
  2. 无效的服务器 HTTP 响应代码(即:499)导致 Alamofire 请求因调用 validate() 而失败?

代码:

    sessionManager.request(url, method: .post, parameters:dict, encoding: JSONEncoding.default)
.validate() //Validate status code
.responseData { response in

if response.result.isFailure {
//??NETWORK ERROR OR INVALID SERVER RESPONSE??
}
}

我们希望以不同的方式处理每种情况。在后一种情况下,我们要询问响应。 (在前者我们不这样做,因为没有响应)。

最佳答案

这是我们目前的工作解决方案:

sessionManager.request(url, method: .post, parameters:dict, encoding: JSONEncoding.default)
.validate() //Validate status code
.responseData { response in

if response.result.isFailure {
if let error = response.result.error as? AFError, error.responseCode == 499 {
//INVALID SESSION RESPONSE
} else {
//NETWORK FAILURE
}
}
}

如果 result.errorAFError 类型,您可以使用 responseCode。来自 AFError 来源评论:

/// Returns whether the `AFError` is a response validation error. When `true`, the `acceptableContentTypes`,
/// `responseContentType`, and `responseCode` properties will contain the associated values.
public var isResponseValidationError: Bool {
if case .responseValidationFailed = self { return true }
return false
}

也许有更好的方法(?)但这似乎有效...

关于swift - Alamofire:网络错误与无效状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40949407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com