2011-06-27 9 views
6

Uso ASIHttpRequest (v 1.8-95) para Iphone y quería crear una solicitud DELETE síncrona junto con algunos datos del cuerpo. Fui de esta manera:ASIHttpRequest Método DELETE con los parámetros del cuerpo

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

Aunque fui confirmado en el lado del cliente a través de

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

que el método se estableció correctamente a "BORRAR" en el lado del servidor se ha recibido una petición "POST" !

Si tan sólo Omito

[request appendPostData: ..] 

una correcta eliminación se ha recibido en el lado del servidor)

Entonces, ¿qué le pasa a mi solicitud? Gracias por cualquier solución.

Saludos

creator_11

Respuesta

7

Buscando el grupo asihttprequest (http://groups.google.com/group/asihttprequest/search?group=asihttprequest&q=delete&qt_g=Search+this+group) gira hasta algunos de los puestos correspondientes, incluida una solución sugerida:

llamada buildPostBody en su petición después de haber poblado el cuerpo, pero antes de establecer el método de la petición.

+0

gracias por su sugerencia que también me envió en este grupo de google. Como se mencionó allí, la solución sugerida con la declaración adicional "buildPostBody" funcionó bien y la solicitud DELETE ahora tiene éxito. Gracias. –

2

verbos HTTP y usos no puede simplemente pueden mezclar y combinar. OK, pueden, pero tendrías que cambiar el servidor para admitir tu uso no estándar. DELETE should use the URI of the resource para ser eliminado, y eso es todo. Sin params POST, sin archivo adjunto.

Si realmente desea enviar un poco de datos adicionales junto con la eliminación, se puede establecer en las cabeceras de la petición (addRequestHeader:value:), y del lado del servidor tirar de esa información, pero evitar que si se puede. El motivo es que el DELETE debería estar borrando una 'cosa' a la que hace referencia su URI. Si la lógica comercial de la aplicación de servidor dice que la eliminación debería afectar a otros objetos (por ejemplo, eliminar en cascada), la aplicación cliente no debería saberlo.

¿Puede explicar lo que está tratando de PUBLICAR mientras se realiza un BORRAR, quizás puedo ofrecer una solución alternativa.

+0

como se mencionó anteriormente, una solución con una declaración adicional "buildPostBody" funcionó bien. Estoy de acuerdo en que desde un punto de vista REST puro usted tiene razón y el recurso a eliminar debe especificarse dentro del URI. Pero, por lo que sé, la especificación del protocolo http. NO prohíbe ninguna publicación de datos junto con una solicitud DELETE. desde nuestro servidor appl. no se basa en el RESTO "puro" solo requiere algunos especificadores de recursos como datos de publicación que ahora es posible enviarlos. Sin embargo, voy a discutir este punto con las personas responsables del servidor de aplicación. solo para mejorar el diseño. Gracias. C. –

Cuestiones relacionadas