2016-09-20 25 views
5

我正在使用Alamofire 4.0的RequestRetrier來控制對過期訪問令牌的請求的重試。我正在關注文檔hereAlamofire 4.0 RequestRetrier應該(_,retry,with,completion)不被調用

我和文檔OAuth2Handler中可用的示例非常類似,它們實現了RequestAdapterRequestRetrier

我遇到的問題是func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)永遠不會被調用。 RequestAdapter實現的adapt方法確實被調用。

調試,我看到SessionDelegate僅調用should(_,retry,with,completion)時出現錯誤,但返回與授權問題狀態代碼的請求,似乎沒有產生錯誤,所以該方法不會被調用。

我失去了一些東西在這裏?

回答

11

也許你沒有收到錯誤。通過Alamofire,400個響應不被視爲錯誤。如果您希望在收到400碼時發生錯誤,您應該將validate()連接到請求。 如果這是你的情況,你可以找到更多的信息here

+1

忘了調用驗證!就是這樣,感謝@crisisGriega! –

8

完全按照documentation中的示例,我的工作不正常。我已經在使用validate(),如示例中所示。

let sessionManager = SessionManager() 
sessionManager.adapter = oauthHandler 
sessionManager.retrier = oauthHandler 
let urlString = "\(baseURLString)/some/endpoint" 

sessionManager.request(urlString).validate().responseJSON { response in 
debugPrint(response) 
} 

儘管隨着Alamofire.SessionManager.defaultSessionManager()更換之後,所述方法func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) 被調用。

let sessionManager = Alamofire.SessionManager.default 
+0

你有沒有想過爲什麼會發生這種情況,我有同樣的問題 – Andrea

+0

@Andrea不,我沒有。 – Ashildr

+0

也需要它,讓它工作:讓sessionManager = Alamofire.SessionManager.default –

相關問題