2011-11-20 17 views
5

Cómo pasar una carga JSON para consumir un servicio REST.Carga JSON para HttpClient en C#?

Aquí es lo que estoy tratando:

var requestUrl = "http://example.org"; 

using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualifiedHeaderValue("application/json")); 
    var result = client.Post(requestUrl); 

    var content = result.Content.ReadAsString(); 
    dynamic value = JsonValue.Parse(content); 

    string msg = String.Format("{0} {1}", value.SomeTest, value.AnotherTest); 

    return msg; 
} 

¿Cómo me pase algo así como un parámetro para la solicitud ?:

{"SomeProp1":"abc","AnotherProp1":"123","NextProp2":"zyx"} 

Respuesta

0

Como petición HTTP GET estrictamente no lo hago cree que puede publicar ese JSON tal como está, tendría que codificarlo en URL y pasarlo como argumentos de cadena de consulta.

Lo que puede hacer es enviar ese JSON el cuerpo de contenido de una solicitud POST a través de WebRequest/WebClient.

puede modificar este ejemplo de código de MSDN para enviar su carga útil JSON como una cadena y que debe hacer el truco:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

+0

¿Qué hay de client.Post? Modifiqué mi código para eso. – TruMan1

2

Aquí es una respuesta similar que muestra cómo publicar JSON prima:

Json Format data from console application to service stack

const string RemoteUrl = "http://www.servicestack.net/ServiceStack.Hello/servicestack/hello"; 

var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl); 
httpReq.Method = "POST"; 
httpReq.ContentType = httpReq.Accept = "application/json"; 

using (var stream = httpReq.GetRequestStream()) 
using (var sw = new StreamWriter(stream)) 
{ 
    sw.Write("{\"Name\":\"World!\"}"); 
} 

using (var response = httpReq.GetResponse()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    Assert.That(reader.ReadToEnd(), Is.EqualTo("{\"Result\":\"Hello, World!\"}")); 
}