在 Alamofire 请求中使用 validate() 时如何处理错误?
How to handle error when using validate() in Alamofire request?
我想处理状态代码 100...402 和 404...599。 403 由 AuthInterceptor 处理。
我已经尝试删除 validate() 并自己处理它,但是在请求中没有 validate() 时不会调用拦截器。
request = AF.request(encodedURLRequest, interceptor: AuthInterceptor()).validate().responseData { (response) in
...
}
我需要在那个块“...”中处理这些状态代码
最好的方法是在验证方法中指定没有 403 的序列 100.599。如果可能的话。
你可以试试下面的方法
Alamofire.request(urlRequest,headers:headers).validate()
.responseJSON {
response in
guard response.response?.statusCode != 403 else
{
print("Session expired, Must relogin")
return
}
guard response.response?.statusCode != 500 else
{
print("Something Went wrong, please refresh")
return
}
guard response.response?.statusCode != 504 else
{
Print("Gateway timeout, Please refresh")
return
}
switch response.result {
case .success:
do{
let marketChart = try JSONDecoder().decode(data.self, from:response.data!)
completionHandler(self.array, nil)
}
catch {
completionHandler(nil, error)
}
case .failure(let error):
print(error.localizedDescription)
completionHandler(nil, error)
}
}
为了重试您的请求,您必须在 Alamofire 的请求管道中的某个时刻产生错误。 validate()
会自动为您执行此操作,让请求在调用响应序列化程序之前重试。您可以自定义 validate()
以仅关心您想要的状态代码,或者您可以创建自定义响应序列化程序并在那里抛出错误。您可以使用自己的一组状态代码自定义验证:
var allowedStatusCodes = Set(200..<500)
allowedStatusCodes.remove(403)
AF.request(...).validate(statusCode: allowedStatusCodes).response { ... }
我想处理状态代码 100...402 和 404...599。 403 由 AuthInterceptor 处理。
我已经尝试删除 validate() 并自己处理它,但是在请求中没有 validate() 时不会调用拦截器。
request = AF.request(encodedURLRequest, interceptor: AuthInterceptor()).validate().responseData { (response) in
...
}
我需要在那个块“...”中处理这些状态代码 最好的方法是在验证方法中指定没有 403 的序列 100.599。如果可能的话。
你可以试试下面的方法
Alamofire.request(urlRequest,headers:headers).validate()
.responseJSON {
response in
guard response.response?.statusCode != 403 else
{
print("Session expired, Must relogin")
return
}
guard response.response?.statusCode != 500 else
{
print("Something Went wrong, please refresh")
return
}
guard response.response?.statusCode != 504 else
{
Print("Gateway timeout, Please refresh")
return
}
switch response.result {
case .success:
do{
let marketChart = try JSONDecoder().decode(data.self, from:response.data!)
completionHandler(self.array, nil)
}
catch {
completionHandler(nil, error)
}
case .failure(let error):
print(error.localizedDescription)
completionHandler(nil, error)
}
}
为了重试您的请求,您必须在 Alamofire 的请求管道中的某个时刻产生错误。 validate()
会自动为您执行此操作,让请求在调用响应序列化程序之前重试。您可以自定义 validate()
以仅关心您想要的状态代码,或者您可以创建自定义响应序列化程序并在那里抛出错误。您可以使用自己的一组状态代码自定义验证:
var allowedStatusCodes = Set(200..<500)
allowedStatusCodes.remove(403)
AF.request(...).validate(statusCode: allowedStatusCodes).response { ... }