Je veux envoyer un objet dynamique comme
new { x = 1, y = 2 };
en tant que corps du message HTTP POST. Alors j'essaie d'écrire
var client = new HttpClient();
mais je ne trouve pas de méthode
client.PostAsJsonAsync()
J'ai donc essayé d'ajouter le package Microsoft.AspNetCore.Http.Extensions à project.json et d'ajouter
using Microsoft.AspNetCore.Http.Extensions;
à utilise la clause. Cependant cela ne m'a pas aidé.
Quel est donc le moyen le plus simple d’envoyer une demande POST avec un corps JSON dans ASP.NET Core?
Vous devez ajouter une référence au package "Microsoft.AspNet.WebApi.Client" (lisez cet article pour obtenir des exemples).
Sans aucune extension supplémentaire, vous pouvez utiliser la méthode standard PostAsync
:
client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));
où jsonInString
valeur que vous pouvez obtenir en appelant JsonConvert.SerializeObject(<your object>);
J'utilise cette classe:
public class JsonContent : StringContent
{
public JsonContent(object obj) :
base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
{ }
}
Exemple d'utilisation:
new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));
J'ajouterais à la réponse acceptée que vous voudriez également ajouter l'en-tête Accept
à la httpClient
:
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Vous pouvez utiliser IEnterprise.Easy-HTTP puisqu'il comporte une analyse de classe intégrée:
await new RequestBuilder<ExampleObject>()
.SetHost("https://httpbin.org")
.SetContentType(ContentType.Application_Json)
.SetType(RequestType.Post)
.SetModelToSerialize(dto)
.Build()
.Execute();