AFNetworking过载后置参数

时间:2012-03-15 04:19:05

标签: objective-c ios cocoa networking afnetworking

我正在从ASIHTTPRequest迁移到AFNetworking并遇到了一个问题。

我正在尝试使用重载post参数的请求来命中API。我之前使用过ASIFormDataRequest,并使用此代码同时更新3个ID。

// ASIHTTPRequestCode
[request addPostValue:@"value1" forKey:@"id"];
[request addPostValue:@"value2" forKey:@"id"];
[request addPostValue:@"value3" forKey:@"id"];

由于AFNetworking使用NSDictionary来存储键值对,因此如何做到这一点似乎并不简单。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我无法立即看到使用AFNetworking直接做到这一点的方法,但有可能做到这一点。

如果你查看AFHTTPClient requestWithMethod的代码,你会看到这一行,它是设置请求体以包含参数的那一行:

 [request setHTTPBody:[AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding) dataUsingEncoding:self.stringEncoding]];

基本上你可以将一个空字典传递给requestWithMethod参数,然后它返回,自己调用request setHTTPBody,以与AFQueryStringFromParametersWithEncoding类似的方式自己编写查询字符串做到了。

答案 1 :(得分:0)

您可以通过这种方式构建请求:

NSURL *url = [NSURL URLWithString:@"http://www.mydomain.com/"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

NSDictionary *postValues = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%@,%@,%@",@"value1",@"value2",@"value3"] forKey:@"id"];

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/path/to/your/page.php" postValues];

答案 2 :(得分:0)

我遇到了类似的问题但通过更新网址解决了这个问题。我添加了我需要使用url发送的参数并将“参数设置为nil”

所以网址变成了

server\url.htm?data=param1&data=param2&data=param3

并发送nil作为paramDictionary

[request setHTTPBody:[AFQueryStringFromParametersWithEncoding(nil, self.stringEncoding) dataUsingEncoding:self.stringEncoding]];