web-dev-qa-db-fra.com

Envoyer un message HTTP POST dans ASP.NET Core à l'aide de HttpClient PostAsJsonAsync

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?

98
Rem

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"));

jsonInString valeur que vous pouvez obtenir en appelant JsonConvert.SerializeObject(<your object>);

153
Set

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 }));
73
stop-cran

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"));
10
Serj Sagan

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();
2
Nikolay Hristov