iOS使用AFNetworking发送DELETE请求时,服务器收到的参数为空

最近项目中服务器那边要求删除接口是DELETE类型的请求,iOS这边程序依然使用原来的AFNetworking库,可是原来发送GET和POST请求都没问题的AFNetworking库,如今使用DELETE却发现服务器那边怎么也收不到参数。
经过获取请求信息,发现AFNetworking发送的DELETE请求,像GET那样把参数写在url后面了。通过查看AFURLRequestSerialization.m文件的源代码,可以看到在init函数中有相关设置:
AFNetworking源码
可见GET,HEAD和DELETE方法都设置为参数加在url后面,而解决这个问题不建议修改AFNetworking源码,只要在调用前把HTTPMethodsEncodingParametersInURI变量修改下就可以了:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    // 申明请求的数据是json类型
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.requestSerializer.timeoutInterval = 15.0f;
    // 申明返回的结果是json类型
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/json",@"application/json",nil];
    // 这里修改请求类型参数设置
    manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
    
    // 设置请求头token
    NSString *token = [UDManager getToken];
    [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@ %@", @"Token", token] forHTTPHeaderField:@"Authorization"];
    // 填写参数
    NSDictionary *paramDic = @{@"ids": callArray};
    [manager DELETE:[NSString stringWithFormat:@"%@%@", HTTP, @"/test/del/"] parameters:paramDic
            success:^(AFHTTPRequestOperation *operation, id responseObject) {
                ...
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                ...
            }];

在请求前从requestSerializer.HTTPMethodsEncodingParametersInURI去掉DELETE方法就可以了,同时上面代码也展示了如何在请求头中添加token令牌,只需将token添加到Authorization字段即可。

猜你喜欢

转载自blog.csdn.net/xinxin_2011/article/details/84979002
今日推荐