ASIHttpRequest УДАЛИТЬ метод с параметрами тела - PullRequest
6 голосов
/ 28 июня 2011

Я использую ASIHttpRequest (v. 1.8-95) для Iphone и хотел создать синхронный запрос DELETE вместе с некоторыми данными тела.Я пошел по этому пути:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:nsUrl];
[request appendPostData:[@"some body params" dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"DELETE"];
[request startSynchronous];

Хотя на стороне клиента через

NSLog(@"request: method:%@", request.requestMethod);

мне было подтверждено, что метод был правильно установлен на «УДАЛИТЬ» на стороне сервера «POST»запрос получен!

Если я просто опущу

[request appendPostData: ..]

, на стороне сервера будет получено правильное УДАЛЕНИЕ)

Так что же не так с моим запросом?Спасибо за любые решения.

С уважением

creator_11

Ответы [ 2 ]

7 голосов
/ 28 июня 2011

Поиск в группе asihttprequest (http://groups.google.com/group/asihttprequest/search?group=asihttprequest&q=delete&qt_g=Search+this+group) приводит к появлению некоторых соответствующих сообщений, включая предлагаемый обходной путь:

вызов buildPostBody по вашему запросу после того, как вы заселили тело, но перед установкой метода запроса.

2 голосов
/ 28 июня 2011

HTTP глаголы и употребления нельзя просто смешивать и сопоставлять.ОК, они могут, но вам придется изменить сервер для поддержки нестандартного использования. DELETE должен использовать URI ресурса , который будет удален, и это все.Нет POST-параметров, нет вложений.

Если на самом деле вы хотите отправить несколько дополнительных данных вместе с удалением, вы можете установить их в заголовках запроса (addRequestHeader:value:), и серверная сторона извлекает эту информациюНо избегайте этого, если можете.Причина в том, что DELETE должен удалять одну «вещь», указанную в ее URI.Если бизнес-логика серверного приложения говорит, что удаление должно влиять на некоторые другие объекты (например, каскадное удаление), клиентское приложение не должно знать об этом.

Можете ли вы объяснить, что вы пытаетесь POST во время выполненияУДАЛЕНИЕ, может быть, я могу предложить альтернативное решение.

...