Existen diferentes interpretaciones en la pregunta si el cuerpo está permitido o no en la solicitud HTTP DELETE
. Ver this por ejemplo. En el HTTP 1.1 specification no está explícitamente prohibido. En mi opinión, no debe usar el cuerpo en el HTTP DELETE
.
Nevertherless creo que se debe utilizar URL como mysite/myobject/objectId
(shop.com/order/1234
) donde el objectId
(una parte de la url) es la información adicional. Como alternativa, puede usar Parámetros de URL: mysite/myobject?objectName=table&color=red
para enviar información adicional al servidor en la solicitud HTTP DELETE
. La parte que comienza con '?' es el urlencoded parámetros divididos dy '&'.
Si desea enviar información más compleja que puede convertir los datos a JSON con respecto a DataContractJsonSerializer o JavaScriptSerializer y luego enviar los datos convertidos (una cadena que nombro myJsonData
más adelante) también como el parámetro: mysite/myobject?objectInfo=myJsonData
.
Si necesita enviar demasiados datos adicionales como parte de la solicitud HTTP DELETE
para que tenga problemas con la longitud de la URL, entonces probablemente debería cambiar el diseño de su aplicación.
ACTUALIZADO: Iy usted quiere enviar alguna corporal por DELETE HTTP se puede hacer esto, por ejemplo, como seguir
// somewhere above add: using System.Net; and using System.IO;
WebClient myWebClient = new WebClient();
// 1) version: do simple request
string t= myWebClient.UploadString ("http://www.examples.com/", "DELETE", "bla bla");
// will be send following:
//
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Expect: 100-continue
// Connection: Keep-Alive
//
//bla bla
// 2) version do complex request
Stream stream = myWebClient.OpenWrite ("http://www.examples.com/", "DELETE");
string postData = "bla bla";
byte[] myDataAsBytes = Encoding.UTF8.GetBytes (postData);
stream.Write (myDataAsBytes, 0, myDataAsBytes.Length);
stream.Close(); // it send the data
// will be send following:
//
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Expect: 100-continue
//
// bla bla
// 3) version
// create web request
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create ("http://www.examples.com/");
webRequest.Method = "DELETE";
webRequest.ServicePoint.Expect100Continue = false;
// post data
Stream requestStream = webRequest.GetRequestStream();
StreamWriter requestWriter = new StreamWriter (requestStream);
requestWriter.Write (postData);
requestWriter.Close();
//wait for server response
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
// send following:
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Connection: Keep-Alive
//
// bla bla
el código completo podría ser un poco más complejo, pero éste ya se va a trabajar. Sin embargo, sigo diciendo que el servicio web necesitaba datos en el cuerpo de la solicitud HTTP DELETE mal diseñados.
¡Eres un tipo! ¡Gracias! –
¡Uf! Esto no parece funcionar con HttpURLConnection. Me aparece "java.net.ProtocolException: DELETE no admite escritura". http://stackoverflow.com/questions/10338615/sending-http-delete-request-in-android –
Estoy con Scott ... ¿cómo hago esto con HttpURLConnection? Tengo que volver a escribir mi código de red para usar Apache HTTP? –