最新消息:文章中包含代码时,请遵守代码高亮规范!

iOS – AFNetWorking post方法将数组作为参数上传

iOS user 137浏览 0评论

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

12545710-c08b9430f3305cee.png

                                                                                                                    上传的参数格式

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

12545710-afc07a75de43b717.png

直接跟改为

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) ;
}]

 ;

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/25350.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Miya的打赏,我们会更加努力!    如果您想成为作者,请点我

发表我的评论
取消评论

表情