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 请求

来自 GET 请求的 AFNetworking 3.0 404 响应

AFNetworking网络请求的get和post步骤

如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?