AFNetWorking用法 POST的字典在内部的处理过程

用法: http://www.hcios.com/archives/1406


红色代码是用来处理POST字典的参数的

1.

AFHTTPSessionManager *manager = [AFHTTPSessionManager  manager];

[manager POST:baseUrl parameters:postBody  constructingBodyWithBlock:

^(id<AFMultipartFormData> _Nonnull formData) {

        

    } progress:^(NSProgress *_Nonnull uploadProgress) {

        

    } success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {

        success(responseObject);

        [SVProgressHUD  dismiss];


    } failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {

        failure(error);

        [SVProgressHUD  showInfoWithStatus:@"网络错误"];


    }];


2.

- (NSURLSessionDataTask *)POST:(NSString *)URLString

                    parameters:(id)parameters

     constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block

                      progress:(nullablevoid (^)(NSProgress *_Nonnull))uploadProgress

                       success:(void (^)(NSURLSessionDataTask *task,id responseObject))success

                       failure:(void (^)(NSURLSessionDataTask *task,NSError *error))failure

{

NSError *serializationError =nil;

NSMutableURLRequest *request = [self.requestSerializer  multipartFormRequestWithMethod:@"POST"  URLString:[[NSURLURLWithString:URLString

relativeToURL:self.baseURL]

absoluteString]  parameters:parameters  constructingBodyWithBlock:block  error:&serializationError];

if (serializationError) {

        if (failure) {

#pragma clang diagnostic push

#pragma clang diagnostic ignored "-Wgnu"

            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{

                failure(nil, serializationError);

            });

#pragma clang diagnostic pop

        }


        returnnil;

    }


__blockNSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request  progress:uploadProgress  completionHandler:^(NSURLResponse *__unused response,id responseObject,NSError *error) {

        if (error) {

            if (failure) {

                failure(task, error);

            }

        } else {

            if (success) {

                success(task, responseObject);

            }

        }

    }];


    [task resume];


    return task;

}


3.

- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method

                                              URLString:(NSString *)URLString

                                             parameters:(NSDictionary *)parameters

                              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block

                                                  error:(NSError *__autoreleasing *)error

{

NSParameterAssert(method);

NSParameterAssert(![method  isEqualToString:@"GET"] && ![method  isEqualToString:@"HEAD"]);


NSMutableURLRequest *mutableRequest = [self  requestWithMethod:method  URLString:URLString  parameters:nil  error:error];


__blockAFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc]  initWithURLRequest:mutableRequest  stringEncoding:NSUTF8StringEncoding];


    if (parameters) {

        for (AFQueryStringPair *pairinAFQueryStringPairsFromDictionary(parameters)) {

            NSData *data =nil;

            if ([pair.value  isKindOfClass:[NSDataclass]]) {

                data = pair.value;

            } elseif ([pair.value  isEqual:[NSNullnull]]) {

                data = [NSData  data];

            } else {

                data = [[pair.valuedescription]dataUsingEncoding:self.stringEncoding];

            }


            if (data) {

                [formData appendPartWithFormData:data  name:[pair.fielddescription]];

            }

        }

    }


    if (block) {

        block(formData);

    }


    return [formData  requestByFinalizingMultipartFormData];

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值