【发布时间】:2016-07-22 19:05:42
【问题描述】:
我创建了一个继承自 AFHTTPSessionManager 的网络管理器类,并在该类中定义了 GET、POST 等方法。这是 POST 实现 -
- (NSURLSessionTask*)performPOSTRequestToURL:(NSString*)postURL andParameters:(NSDictionary*)parameters withCompletionBlock:(WebServiceCompletionResponse)completionBlock {
[self POST:postURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* Token is still valid, got success response / data */
if (completionBlock) {
completionBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if ([error code] == SESSION_EXPIRED_CODE) { /* Token has expired because error code is SESSION_EXPIRED_CODE */
/* Make call to refresh token */
[[TokenLibrary sharedInstance] refreshToken:^(NSError *error, NSString *token) {
if (error) {
completionBlock(error);
}
else{
/* Got refreshed token, I want to call performPOSTRequestToURL with the same url now. How do I do it? Is the call below okay? */
[self performPOSTRequestToURL:postURL andParameters:parameters withCompletionBlock:completionBlock];
}
}];
}
}];
}
我在上面的最后一条评论中提出了我的问题。
基本上,我进行网络调用以发布或获取数据,如果我从 web 服务获得 SERVER_EXPIRED_CODE 作为错误响应,我需要先刷新令牌,然后再次进行相同的 API 调用。
我可以直接调用方法来代替最后的注释吗?或者有其他或更好的方法吗?
【问题讨论】:
-
是的,你在正确的轨道上,这是一种在成功刷新令牌后调用 api 的干净方法。
-
@AtWork 感谢您的快速回复。我已经编辑了代码块以实际进行调用 - [self performPOSTRequestToURL:postURL andParameters:parameters withCompletionBlock:completionBlock];这看起来不错?
-
对我来说看起来不错,应该可以。你试过运行它吗?
-
是的,我做到了,但还不能检索 SESSION_EXPIRED_CODE。将尝试以某种方式模拟或联系服务团队。否则效果很好。非常感谢您的回复。
-
尝试在浏览器中运行该服务,无论它是否良好。
标签: ios objective-c afnetworking objective-c-blocks