AFNetworking 在 GET 请求的 JSON 参数中发送数组
Posted
技术标签:
【中文标题】AFNetworking 在 GET 请求的 JSON 参数中发送数组【英文标题】:AFNetworking send array in JSON parameters of GET request 【发布时间】:2015-10-26 06:38:26 【问题描述】:我在 AFNetworking GET 请求中将数组作为参数发送。
我的代码如下:
- (void)getProductSearchResult:(NSString *)locale andSearchDict:(NSDictionary *)dictSearch
NSString *strURL = [NSString stringWithFormat:@"%@/%@/search?%@",BASEURL,locale,APIFORMAT];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager GET:strURL parameters:dictSearch success:^(AFHTTPRequestOperation *operation, id responseObject)
NSDictionary *jsonDict = (NSDictionary *)responseObject;
if ([jsonDict isKindOfClass:[NSDictionary class]] || [jsonDict isKindOfClass:[NSMutableDictionary class]])
if (self.delegate && [self.delegate respondsToSelector:@selector(API_ProductSearch_didSuccess:)])
[self.delegate API_ProductSearch_didSuccess:jsonDict];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
if (self.delegate && [self.delegate respondsToSelector:@selector(api_ProductSearch_didFailWithError:)])
[self.delegate api_ProductSearch_didFailWithError:[NSError description]];
];
我作为参数传递的字典如下:
"brand_filter" = (
1
);
"category_filter" = (
438
);
"max_price" = "47.37188";
"min_price" = "1.95";
"price_currency" = USD;
"supplier_filter" = (
"Aakron Line"
);
创建的 URL 如下所示
http://demo.aakronline.ca/app_dev.php/api/v1/en_us/search?_format=json&brand_filter[]=1&category_filter[]=438&max_price=48.04479&min_price=2.622917&price_currency=USD&supplier_filter[]=Aakron%20Line
URL 中的问题区域是数组没有以正确的格式传递,即
brand_filter[]=1&category_filter[]=438 instead of brand_filter=[1]&category_filter=[438]
谁能告诉我如何解决这个错误?
但我没有得到成功的响应。
【问题讨论】:
首先检查 Postman.. 验证 Url 和参数是否正确,链接:chrome.google.com/webstore/detail/postman/… 我已经检查了邮递员,它正在工作,但问题是在 URL 中,其中数组以这种格式传递,brand_filter[]=1&category_filter[]=438。格式不正确。 我认为创建一个字典并传递它而不是数组。尝试离子 尝试在这个格式中使用demo.aakronline.ca//app_dev.php/api/v1/en_us/… 【参考方案1】:在 afnetworking 3.0 中,使用 AFHTTPSessionManager
代替 AFHTTPRequestOperationManager
NSString *strUrl = [NSString stringWithFormat:@"%@/%@/search?%@",BASEURL,locale,APIFORMAT];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:strUrl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
NSLog(@"value: %@",responseObject);
//other code as it is
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
NSLog(@"Error: %@",error);
];
【讨论】:
以上是关于AFNetworking 在 GET 请求的 JSON 参数中发送数组的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 在 GET 请求的 JSON 参数中发送数组
在 AFNetworking 3 GET 请求中删除查询末尾的问号
AFNetworking 2.0 参数字典不适用于 GET 请求