AFNetworking:设置GET参数*和*拦截重定向

dpa*_*age 5 ios afnetworking

我在iOS项目中使用AFNetworking 2.0,我正在尝试使用一些参数构建GET请求,拦截重定向.

我看到了这个方法-[AFHTTPRequestOperation setRedirectResponseBlock],我用它来获取重定向并用它们做一些事情.但我没有看到如何在该操作上设置请求参数.这是看起来像:

    AFHTTPRequestOperation *ballotOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];

    [ballotOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"in completion");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"in error");
    }];

    [ballotOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
        if (redirectResponse == nil) {
            return request;
        } else {
            NSLog(@"in redirect, blocking");
            [ballotOperation cancel];
            return nil;
        }
    }];

    [[AFHTTPRequestOperationManager manager].operationQueue addOperation:ballotOperation];
Run Code Online (Sandbox Code Playgroud)

我看到AFHTTRequestOperationManagerGET:parameters:success:failure:可以设置参数的方法.但是这会立即启动请求,而不是让我有机会在其上设置重定向块.

我从AFNetworking 1.x中看到了一些示例代码AFHTTPClient,但是我不想回去!

我怎么能做我想做的事情?

roo*_*oob 6

[AFHTTPRequestOperationManager GET...]方法AFHTTPRequestOperationManager.m只是创建AFHTTPRequestOperation对象并将其添加到operationQueue 的包装器.以此为例,您可以完成您想要做的事情.

这是在以下GET方法中创建请求的方式AFHTTPRequestOperationManager:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:[[NSURL URLWithString:URLString relativeToURL:manager.baseURL] absoluteString] parameters:parameters error:nil];
Run Code Online (Sandbox Code Playgroud)

其中urlString是表示url的NSString,参数是NSDictionary.

我相信其余的代码应该可以工作,但是以防万一,这里是如何在GET方法中完成的(同时添加了重定向块):

AFHTTPRequestOperation *ballotOperation = [self HTTPRequestOperationWithRequest:request success:success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"in completion");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"in failure");
}];

[ballotOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
    if (redirectResponse == nil) {
        return request;
    } else {
        NSLog(@"in redirect, blocking");
        [ballotOperation cancel];
        return nil;
    }
}];

[manager.operationQueue addOperation:ballotOperation];
Run Code Online (Sandbox Code Playgroud)