今天是测试BUG的第一周,遇到了一个奇葩的问题,DELETE请求传数据:
NSDictionary *parameters = @{@"objtype":@"course_thread"}; //发送网络请求(请求方式为DELETE) [manager DELETE:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (success) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { failure(error); } }];这样开起来是没有问题的吧?可是服务器那边死活接收到数据!!!!!泪奔啊,本来还以为是自己的问题,各种调试,最后没有办法,去查看了一下AFNetworking中传参数的源码:
发现DELETE方式和GET或者HEAD方式使用了同样的方法,所以后台是接受不到数据的,怎么解决这个问题呢?
方法一:找到源码,把
self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil];中的DELETE去掉
方法二:封装的时候修改,把DELETE去掉,当然建议使用第二种方法
NSDictionary *parameters = @{@"objtype":@"course_thread"}; manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil]; //发送网络请求(请求方式为DELETE) [manager DELETE:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (success) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { failure(error); } }];
方法三:不依赖于AFNworking,自己写请求
NSString * url = @"url地址"; NSMutableURLRequest * req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; req.HTTPMethod = @"DELETE"; req.HTTPBody = [dic JSONData];//dic字典相当于parameters,请求体里的东西 req.allHTTPHeaderFields = @{ @"Content-Type":@"application/json" };//请求头里的东西 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [NSURLConnection sendAsynchronousRequest:req queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (connectionError) { //失败 } else { //成功 } }];
三种方法,都可行,建议使用第二种哦。。。。。。