美文网首页IOS知识积累
iOS - AFNetWorking post方法将数组作为参数

iOS - AFNetWorking post方法将数组作为参数

作者: ShIwEn9 | 来源:发表于2019-04-14 11:25 被阅读16次

在最近的一个项目中后段要求直接post 一个数组位参数传给服务器,在之前的项目中,我们只是将字典作为参数传给服务器,直接将字典作为参数的情况并不多见。于是在网上查阅了一些资料发现很多人都是将数组转成json然后再去上传,但是我传过去之后,服务器告诉我参数错误 WTF!!
最后发现罪魁祸手居然是AFNetWorking框架的问题

上传的参数格式

修改方法如下
找到AFNetWorking 下的AFURLRequestSerialization.m文件然后再找到AFQueryStringPairsFromKeyAndValue方法会看到下图这句话


直接跟改为

for (id nestedValue in array) {
[mutableQueryStringComponents addObjectsFromArray:
AFQueryStringPairsFromKeyAndValue(
      [NSString stringWithFormat:@"%@[%lu]", key,(unsigned long)[array indexOfObject:nestedValue]], nestedValue)];
}

然后直接传数组就好了

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager] ;
    
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    [manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"] forHTTPHeaderField:@"token"];
    
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/html", @"text/plain", @"text/javascript", nil];
    
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    
    NSString *url = [NSString stringWithFormat:@"%@",@“你的url”] ;
   

    NSDictionary *parameter = @{
                                @"goodsName" : [self stringForNull:self.goodsDetailDict[@"goodsName"]],
                                @"goodsId" : self.idString,
                                @"number" : @"1"
                                } ;
    
    NSArray *parameterArr = [NSArray arrayWithObject:parameter] ;
    
    NSLog(@"url = %@",url) ;
    NSLog(@"parameter = %@",parameterArr) ;
    
    [manager POST:url parameters:parameterArr progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        NSDictionary *dict = (NSDictionary *)responseObject ;
        NSLog(@"dict = %@",dict) ;
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error%@",error) ;
    }] ;

这样就可以请求成功了

相关文章

网友评论

    本文标题:iOS - AFNetWorking post方法将数组作为参数

    本文链接:https://www.haomeiwen.com/subject/aisjwqtx.html