J'essaie de POST une JsonObject
en utilisant HttpClient
à partir de l'API Web. Je ne sais pas trop comment procéder et je ne trouve pas grand-chose en échantillon de code.
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 lancer ma JsonObject
en tant que StreamContent
mais je commence à être suspendu à cette étape.
Avec la nouvelle version de HttpClient et sans le package WebApi, ce serait:
var content = new StringContent(jsonObject.ToString(), 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 une variable StringContent
avec la représentation JSON de votre objet JSON.
httpClient.Post(
"",
new StringContent(
myObject.ToString(),
Encoding.UTF8,
"application/json"));
En fonction de 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 StringContent AsJson(this object o)
=> new StringContent(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 ajouter un commentaire à la réponse de pomber, alors je poste une autre réponse. En utilisant l'approche de pomberie, j'ai continué à recevoir une réponse "400 requêtes incorrectes" d'une API à laquelle je postais ma requête JSON (Visual Studio 2017, .NET 4.6.2). Le problème a finalement été attribué à l’en-tête "Content-Type" généré par StringContent () étant incorrect (voir https://github.com/dotnet/corefx/issues/7864 ).
tl; dr
Utilisez la réponse de pomber avec une ligne supplémentaire pour définir correctement l'en-tête de la demande:
var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = client.PostAsync(url, content).Result;
le code dessus dans vbnet:
dim FeToSend as new (object--> define class)
Dim client As New HttpClient
Dim content = New StringContent(FeToSend.ToString(), Encoding.UTF8,"application/json")
content.Headers.ContentType = New MediaTypeHeaderValue( "application/json" )
Dim risp = client.PostAsync(Chiamata, content).Result
msgbox(risp.tostring)
J'espère que cette aide