AFNetworking中的DELETE请求遇到的问题

今天是测试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 {
            //成功
        }
    }];

三种方法,都可行,建议使用第二种哦。。。。。。


猜你喜欢

转载自blog.csdn.net/sun_cui_hua/article/details/79012117