POST JsonObject avec HttpClient à partir de l’API Web

J’essaie de POST un JsonObject utilisant HttpClient de Web API. Je ne sais pas trop comment procéder et je ne trouve pas beaucoup de code d’exemple.

Voici ce que j’ai jusqu’à présent:

 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("", ???); 

Je pense que je dois JsonObject mon JsonObject en StreamContent mais je suis coincé sur cette étape.

    Avec la nouvelle version de HttpClient et sans le package WebApi, ce serait:

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

    Ou si vous le voulez async:

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

    Le moyen le plus simple consiste à utiliser un SsortingngContent , avec la représentation JSON de votre object JSON.

     httpClient.Post( "", new SsortingngContent( myObject.ToSsortingng(), Encoding.UTF8, "application/json")); 

    Selon votre version .NET, vous pouvez également utiliser la méthode HttpClientExtensions.PostAsJsonAsync .

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

    Si vous utilisez Newtonsoft.Json:

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

    Exemple:

     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()) 

    Je n’ai pas assez de réputation pour append un commentaire sur la réponse du pomber, alors je poste une autre réponse. En utilisant l’approche de pomber, je continuais à recevoir une réponse “400 Bad Request” d’une API. J’envoyais ma requête JSON (Visual Studio 2017, .NET 4.6.2). Finalement, le problème a été atsortingbué à l’en-tête “Content-Type” produit par SsortingngContent () étant incorrect (voir https://github.com/dotnet/corefx/issues/7864 ).

    tl; dr

    Utilisez la réponse du pilleur avec une ligne supplémentaire pour définir correctement l’en-tête sur la requête:

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

    C’est simple et cela fonctionne client.PostAsJsonAsync("",TModel obj)

    référence: 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.Ssortingng,% 60% 600% 29