关于ios:AFNetworking HTTP删除使用正文而不是URL

AFNetworking HTTP delete use body instead of URL

我正在尝试从我的iOS应用程序向RESTful Django Web服务发送HTTP DELETE请求。
我使用AFNetworking 2.0(2.4)。

在分析了我的API调用的成功块中的AFHTTPREquestOperation之后,我发现请求的主体是零。 参数URL在URL中编码和发送。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<AFHTTPRequestOperation: 0x10c587940,
state: isFinished,
cancelled: NO
request: <NSMutableURLRequest: 0x10c521ab0> {
URL: https://anURL.com/connections?data%5Bconnections%5D%5B%5D%5Bid%5D=106 },
response: <NSHTTPURLResponse: 0x10c5c7590> {
URL: anURL.com/
connections?data%5Bconnections%5D%5B%5D%5Bid%5D=106
}
{ status code: 200, headers {
    Connection ="Keep-Alive";
   "Content-Type" ="application/json";
    Date ="Tue, 05 Aug 2014 14:07:53 GMT";
   "Keep-Alive" ="timeout=5, max=100";
    Server ="Apache/2.4.7 (Ubuntu)";
   "Transfer-Encoding" = Identity;
} }>

现在我想知道是否可以在请求正文中发送参数,就像使用HTTP POST而不是在URL中发送它们一样。 那可能吗?

如何使用AFNetworking做到这一点?

我如何发送atm:

1
2
3
4
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager DELETE:host_url parameters:params success:success failure:failure];

我想发送的身体(它在上面的"params"参数中有什么):

1
2
3
4
5
6
7
8
9
10
11
12
{
   "data": {
       "connections": [
            {
               "id": 92
            },
            {
               "id": 91
            }
        ]
    }
}


有同样的问题。 由于问题仍然存在,将在此处发布答案。 您需要做的就是更改HTTP方法,将参数编码为查询字符串(默认为GET,HEAD和DELETE)。 请求序列化程序具有HTTPMethodsEncodingParametersInURI属性。 只需将它设置为GET,HEAD就可以了:

1
serializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];


@ f3n1kc提供的答案已更正,但万一您要查找Swift版本:

1
2
3
let manager = AFHTTPSessionManager()
manager.requestSerializer = AFHTTPRequestSerializer()
manager.requestSerializer.HTTPMethodsEncodingParametersInURI = ["GET","HEAD"]