Подтвердить что ты не робот

AFNetworking HTTP удаляет использование тела вместо URL

Я пытаюсь отправить запрос HTTP DELETE на веб-службу RESTful Django из моего приложения iOS. Я использую AFNetworking 2.0 (2.4).

После анализа AFHTTPREquestOperation в блоке успеха моего вызова API я обнаружил, что тело запроса равно нулю. URL-адреса параметров, закодированные и отправленные в URL-адрес.

<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:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

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

Тело, которое я хочу отправить (его значение в параметре "params" выше):

{
    "data": {
        "connections": [
            {
                "id": 92
            },
            {
                "id": 91
            }
        ]
    }
}
4b9b3361

Ответ 1

Была такая же проблема. Поскольку вопрос все еще открыт, опубликуйте ответ здесь. Все, что вам нужно сделать, это изменить методы HTTP, которые кодируют параметры как строку запроса (по умолчанию GET, HEAD и DELETE). Для этого для serializer имеет свойство HTTPMethodsEncodingParametersInURI. Просто установите его в GET, HEAD, и вы закончите:

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

Ответ 2

Ответ, предоставленный @f3n1kc, исправляется, но на всякий случай вы ищете Swift Version:

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