是否有可能
AFNetworking
也考虑 API
状态代码?
调用返回 200 HTTP 代码表示正常,但状态代码为 406 表示失败。
这会导致
AFNetworking
成功块被调用,即使 API 调用失败。
这个问题有解决办法吗?
代码:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSString *APICallURL = [NSString stringWithFormat:@"%@/%@", SERVER_URL, @"something.php"];
[manager GET:APICallURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success();
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
X-API-Status-Code
是一个完全非标准的标头(实际上,根据定义,任何以 X-...
开头的标头)。
该标头是您的特定服务器选择报告 API 状态代码的专有方式。它可以选择任何其他专有标头来执行此操作,也许可以将其称为
X-API-ReturnCode
或其他名称。
所以我怀疑
AFNetworking
是否会原生支持这一点。
但是您可能可以创建自己的
AFURLResponseSerialization
子类并实现validateResponse
,以便您的代码检查此专有标头并采取相应措施。
服务器发出的任何故障状态代码都不会到达故障块。对于 AFNetworking,网络调用成功,并显示来自服务器的错误代码。
只有当我们无法成功完成网络调用时,它才会到达失败块,例如 1) 超时错误 2)服务器宕机,无法访问 3)网络丢失等
解决方案是我们应该检查成功块中网络调用的状态代码并识别来自服务器的错误响应