Неверный ответ от Alamofire? - PullRequest
1 голос
/ 14 июля 2020

Я делаю запрос к серверу с помощью Alamofire. Вот как я это делаю:

Alamofire.request(url, method: .post, parameters: [:] ,encoding: JSONEncoding.default).responseJSON { response in

            print("response=\(response)")
            print("Response=:\((response.response?.statusCode)!)")
            switch response.result{
            case .success :
                let passList = AuthenticateSuccess(nibName: "AuthenticateSuccess", bundle: nil)
                self.navigationController?.pushViewController(passList, animated: true)
                print("connected")
            case .failure(let error):
                self.showAlertTost("", msg: "Authentication Failed. Authenticate again!", Controller: self)
                

            }
        }

Вот что печатает:

response=SUCCESS: {
    message = "Access denied.";
}
Response=:401
connected

Я хочу знать, что если 401 - это ошибка, почему выполняется успешный блок? В случае отказа в Alamofire обрабатывается иначе?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Как в документации сказано:

По умолчанию Alamofire считает любой завершенный запрос успешным, независимо от содержания ответа. Вызов validate() перед обработчиком ответа приводит к возникновению ошибки, если ответ имеет недопустимый код состояния или тип MIME.

Например,

Alamofire.request(url, method: .post, encoding: JSONEncoding.default)
    .validate()
    .responseJSON { response in
        ...
}

С validate, Ответы, отличные от 2xx, теперь будут рассматриваться как ошибки.

0 голосов
/ 14 июля 2020

response.success означает, что сервер вернул ответ. В то время как 401 - это то, что связано с ответом REST, сгенерированным вашей бэкэнд-системой. Следовательно, добавьте проверку к коду ответа после подтверждения того, что вы получили ответ, чтобы предоставить конечному пользователю лучшую информацию.

...