Как обработать ошибку при использовании validate () в запросе Alamofire? - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы обработать коды состояния 100 ... 402 и 404 ... 599. 403 обрабатывается AuthInterceptor.

Я уже пытался удалить validate () и обработать его самостоятельно, но перехватчик не вызывается без validate () в запросе.

request = AF.request(encodedURLRequest, interceptor: AuthInterceptor()).validate().responseData { (response) in
    ...
}

Мне нужнодля обработки этих кодов состояния в этом блоке "..." лучшим способом было бы указать последовательность 100.599 без 403 в методе validate. Если это вообще возможно.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Чтобы повторить ваши запросы, вы должны вызвать ошибку в какой-то момент в конвейере запросов Alamofire. validate() делает это для вас автоматически, позволяя повторить запрос до вызова вашего сериализатора (ов) ответа. Вы можете либо настроить validate(), чтобы заботиться только о нужных кодах состояния, либо создать сериализатор с настраиваемым ответом и выдать ошибку там. Вы можете настроить свою проверку с помощью собственного набора кодов состояния:

var allowedStatusCodes = Set(200..<500)
allowedStatusCodes.remove(403)

AF.request(...).validate(statusCode: allowedStatusCodes).response { ... }
0 голосов
/ 30 сентября 2019

Вы можете попробовать, как показано ниже

 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)
            }
    }
...