2012-09-11 51 views
20

Tengo un servicio Restful simple que se llama desde una aplicación de consola, así que estoy usando WebClient. Me pregunto si esta llamada para Eliminar es correcta.WebClient restful Eliminar

La url parece localhost/RestService1/persona/1

using (var client = new WebClient()) 
{ 
    client.UploadString(url, "DELETE", ""); 
} 

No me gusta que UploadString no tiene una sobrecarga sin ningún parámetro de datos. El paso de un parámetro vacío no me sienta bien. ¿Hay un método mejor para usar para un "DELETE"?

Podría usar WebRequest pero quiero usar WebClient para mantenerlo consistente.

Aquí es el bloque de WebRequest

var request = WebRequest.Create(url); 
request.Method = "DELETE"; 
var response = (HttpWebResponse)request.GetResponse(); 

Ambos bloques funcionan bien, pero lo que es mejor? ¿O hay un mejor camino?

+0

Ver también: http://stackoverflow.com/questions/2539394/rest-http-delete-and-parameters –

+0

véase también: http: // stackoverflow. com/questions/512279/restful-delete-strategy –

+0

Aparte de la relación con DELETE y RESTful en esas referencias, no creo que 'WebClient' realmente te brinde la semántica de DELETE. 'Webclient' solo usa' WebRequest' ('HttpWebRequest') bajo las cubiertas, por lo que creo que usar' HttpWebRequest') directamente es más legible. –

Respuesta

3

La clase WebClient no presta muy bien al consumo api tranquilo, he usado en el pasado bibliotecas de terceros como RestSharp que están más orientadas a este tipo de solicitud web. Estoy bastante seguro de que RestSharp simplemente utiliza HttpWebRequest bajo las sábanas, pero proporciona una gran cantidad de semántica que facilita el consumo y la reutilización de los recursos de descanso.

+0

Estoy usando WebClient con Newtonsoft Json y es muy simple de usar. Buscaré en RestSharp. Gracias –

3

Ve por las bibliotecas de cliente Microsoft.Net.Http http://nuget.org/packages/Microsoft.Net.Http

HttpClient es un cliente mucho mejor utilizar para trabajar con una API.

+0

Este paquete no es compatible con Visual Studio 2010, y solo es necesario para proyectos que tengan como objetivo .NET Framework 4.5 o .NET para Windows Store cuando consuma una biblioteca que use este paquete. – juFo

+0

@juFo Es compatible con VS2010 y en .net 4.0. No estoy seguro de por qué pensarías lo contrario. –

+0

Acabo de citar el enlace que proporcionó: http://nuget.org/packages/Microsoft.Net.Http – juFo

10

Los siguientes obras para mí:

client.UploadValues(url, "DELETE", new NameValueCollection()); 
+0

Y si necesita proporcionar parámetros adicionales (por ejemplo, api_key), puede proporcionarlos a través de una cadena de consulta en la url. – MattGerg