POSTING JsonObject con HttpClient desde la API web

Estoy intentando JsonObject un JsonObject usando HttpClient desde Web API. No estoy muy seguro de cómo hacerlo y no puedo encontrar mucho en el camino del código de muestra.

Esto es lo que tengo hasta ahora:

 var myObject = (dynamic)new JsonObject(); myObject.Data = "some data"; myObject.Data2 = "some more data"; HttpClient httpClient = new HttpClient("myurl"); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.Post("", ???); 

Creo que necesito lanzar mi JsonObject como StreamContent pero me estoy colgando en ese paso.

Con la nueva versión de HttpClient y sin el paquete WebApi sería:

 var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); var result = client.PostAsync(url, content).Result; 

O si lo quieres asincrónico:

 var result = await client.PostAsync(url, content); 

La forma más fácil es usar un StringContent , con la representación JSON de su objeto JSON.

 httpClient.Post( "", new StringContent( myObject.ToString(), Encoding.UTF8, "application/json")); 

Dependiendo de su versión de .NET también podría usar el método HttpClientExtensions.PostAsJsonAsync .

https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx

Si usa Newtonsoft.Json:

 using Newtonsoft.Json; using System.Net.Http; using System.Text; public static class Extensions { public static StringContent AsJson(this object o) => new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json"); } 

Ejemplo:

 var httpClient = new HttpClient(); var url = "https://www.duolingo.com/2016-04-13/login?fields="; var data = new { identifier = "username", password = "password" }; var result = await httpClient.PostAsync(url, data.AsJson()) 

No tengo suficiente reputación para agregar un comentario sobre la respuesta de pomber, así que estoy publicando otra respuesta. Usando el enfoque de pomber, seguí recibiendo una respuesta de “400 solicitudes incorrectas” de una API a la que estaba enviando mi solicitud JSON (Visual Studio 2017, .NET 4.6.2). Finalmente, el problema se remonta al encabezado “Content-Type” producido por StringContent () que es incorrecto (consulte https://github.com/dotnet/corefx/issues/7864 ).

tl; dr

Utilice la respuesta de pomber con una línea adicional para establecer correctamente el encabezado en la solicitud:

 var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var result = client.PostAsync(url, content).Result; 

Esto es simple y funciona client.PostAsJsonAsync("",TModel obj)

referencia: https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx#M:System.Net.Http.HttpClientExtensions.PostAsJsonAsync%60%601%28System.Net. Http.HttpClient, System.String,% 60% 600% 29