Je veux envoyer un objet dynamique comme
new { x = 1, y = 2 };
comme corps du message HTTP POST. Alors j'essaye 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;
to uses clause. Cependant, cela ne m'a pas aidé.
Alors, quel est le moyen le plus simple d'envoyer une requête POST avec un corps JSON dans ASP.NET Core?
Réponses:
Vous devez ajouter une référence au package «Microsoft.AspNet.WebApi.Client» (lisez cet article pour des exemples).
Sans aucune extension supplémentaire, vous pouvez utiliser la
PostAsync
méthode standard :où la
jsonInString
valeur que vous pouvez obtenir en appelantJsonConvert.SerializeObject(<your object>);
la source
HttpClient
méthode d'extension (PostAsJsonAsync
) pour utiliser la seconde méthode. Cela vous permet d'éviter la répétition du code.J'utilise cette classe:
Exemple d'utilisation:
la source
Content-Length:
en-tête HTTP?HttpClient
paramètres, par exemple si un ensemble d'en-client.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
tête ne serait pas défini etTransfer-Encoding: chunked
serait défini à la place. Cependant, si l'on crée le client commevar client = new HttpClient();
, l'en-têteContent-Length
serait défini pour cette classe de contenu par défaut.J'ajouterais à la réponse acceptée que vous voudriez également ajouter l'en-
Accept
tête auhttpClient
:la source
Vous avez raison de dire que cela a été implémenté depuis longtemps dans .NET Core.
Au moment de la rédaction de cet article (septembre 2019), le
project.json
fichier de NuGet 3.x + a été remplacé parPackageReference
(comme expliqué sur https://docs.microsoft.com/en-us/nuget/archive/project-json ).Pour accéder aux
*Async
méthodes de laHttpClient
classe, votre.csproj
fichier doit être correctement configuré.Ouvrez votre
.csproj
fichier dans un éditeur de texte brut et assurez-vous que la première ligne est<Project Sdk="Microsoft.NET.Sdk.Web">
(comme indiqué sur https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-format ).
Pour accéder aux
*Async
méthodes de laHttpClient
classe, vous devez également avoir la bonne référence de package dans votre.csproj
fichier, comme ceci:(Voir https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Aussi: Nous recommandons les applications ciblant ASP.NET Core 2.1 et utilisez ultérieurement le métapaquet Microsoft.AspNetCore.App , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )
Des méthodes telles que
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
etDeleteAsync
devraient maintenant fonctionner hors de la boîte. (Aucune directive d'utilisation n'est nécessaire.)Mise à jour: la balise PackageReference n'est plus nécessaire dans .NET Core 3.0.
la source