使用Alamofire 4/Swift 3,您如何区分由于以下原因而失败的请求:
代码:
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??
}
}
我们希望以不同的方式处理每个案件。在后一种情况下,我们要询问回答。(在前一种情况下,我们不知道,因为没有回应)。
自动验证应考虑200...299(成功代码)范围内的状态代码,因此当您获得无效的服务器HTTP响应代码5xx(499意味着客户端关闭请求)时,您可以确保它不依赖于验证。
关于statusCode
,我的建议是遵循正确的新规则来获取它。如果您在检索时遇到问题,请查看此答案。
说到网络可达性,你可以写:
let manager = NetworkReachabilityManager(host: "www.apple.com")
manager?.listener = { status in
print("Network Status Changed: \(status)")
}
manager?.startListening()
在使用网络可达性来确定下一步要做什么时,需要记住一些重要的事情。
您也可以在官方的Alamofire 4 GitHUB页面上找到这些详细信息
Alamofire可以告诉你请求的状态,这个代码对我来说很好:
if let error = response.result.error as? NSError {
print(error)//print the error description
if (error.code == -1009){
print(error.code) // this will print -1009,somehow it means , there is no internet connection
self.errorCode = error.code
}
//check for other error.code
}else{
//there is no problem
}
错误。代码将告诉您问题所在
以下是我们当前的工作解决方案:
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
}
}
}
如果<代码>结果。错误类型为AFError
您可以使用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
}
也许有更好的方法(?)但这似乎奏效了。。。
我通过Spring Webflux框架使用Reactor Netty,以便将数据发送到远程内容交付网络。当客户端请求完成时,默认的反应器Netty行为是保持连接活动并将其释放回底层连接池。 一些内容交付网络建议在某些类型的状态代码(例如500个内部服务器错误)上重新解析DNS。为了实现这一点,我添加了一个自定义的Netty和,但我也需要关闭连接,否则它将被释放回池中,并且不会重新解析DNS。 如何
jd.getNetworkType(OBJECT) 获取网络类型。 OBJECT 参数说明: 参数 类型 必填 说明 success Function 是 接口调用成功的回调 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) success 回调参数说明: 参数 说明 networkType 网络类型
我使用axios与自己的API(不是用NodeJS编写的)通信。 当我发布一个非简单的请求时,axios总是直接转到控制台中显示网络错误的catch块,即使有2个成功的Http请求。 错误:网络错误堆栈跟踪:createerror@http://localhost:3000/statist/js/bundle.js:1634:15 handleerror@http://localhost:3000
问题内容: 像这样的代码: 问题答案: 不适用于我。最好在 Alamofire中 使用这样的代码:
我试图使用回调将验证输入。 当我试图在文本框中输入时,我遇到了下面的错误。有人能帮我解释一下为什么我会犯这个错误,以及我如何纠正它吗。 不允许回调吗?我错过了什么? 未捕获错误:对象作为React子对象无效(找到:具有键{dispatchConfig、_TargetList、nativeEvent、type、target、currentTarget、eventPhase、bubbles、cance
我下载了VS 2017 15.7、.NET Core 2.1.2和Blazor来试用。它在VS 2017中无法正常工作,我想我会尝试通过dotnet cli和VS代码。相反,我遇到了以下错误: < code>CSC:错误cs 1617 :/ lang version的选项“7.3”无效。 在VS中,它将运行应用程序显示“正在加载...”然后什么都没有了。不确定这两个问题是否相关 返回以下内容: