AFNetworking AFHTTPSessionManager POST调用两次

时间:2016-10-21 21:37:07

标签: ios objective-c afnetworking afnetworking-3

我正在使用新的afnetworking 3.0库来使用AFHTTPSessionmanager进行网络请求登录。因此,当我执行POST调用时,如果我获得401,则会在响应中以静默方式调用另一个网络请求。

如何通过在故障回调时不再调用服务来避免它?

[manager POST:[[urlReq URL] absoluteString] parameters:nil progress:nil success:^(NSURLSessionTask *operation, id responseObject)

1 个答案:

答案 0 :(得分:1)

如果您收到身份验证质询,则会看到第二个请求。

如果您愿意,您可以直接拒绝授权质询,这会停止第二个请求:

[manager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing  _Nullable * _Nullable credential) {
    return NSURLSessionAuthChallengeCancelAuthenticationChallenge;
}];

或者,如果您想继续进行身份验证,可以执行以下操作:

[manager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing  _Nullable * _Nullable credential) {
    if (challenge.previousFailureCount == 0) {
        *credential = [NSURLCredential credentialWithUser:self.user password:self.password persistence:NSURLCredentialPersistenceForSession];
        return NSURLSessionAuthChallengeUseCredential;
    }

    return NSURLSessionAuthChallengeCancelAuthenticationChallenge;
}];

这完全取决于您对Web服务上的用户进行身份验证的方式。