Ich möchte dynamisches Objekt wie senden
new { x = 1, y = 2 };
als Hauptteil der HTTP-POST-Nachricht. Also versuche ich zu schreiben
var client = new HttpClient();
aber ich kann keine Methode finden
client.PostAsJsonAsync()
Also habe ich versucht, das Paket Microsoft.AspNetCore.Http.Extensions zu project.json hinzuzufügen und hinzuzufügen
using Microsoft.AspNetCore.Http.Extensions;
Klausel zu verwenden. Es hat mir jedoch nicht geholfen.
Was ist der einfachste Weg, um eine POST-Anfrage mit JSON-Body in ASP.NET Core zu senden?
Antworten:
Sie sollten einen Verweis auf das Paket "Microsoft.AspNet.WebApi.Client" hinzufügen (Beispiele finden Sie in diesem Artikel ).
Ohne zusätzliche Erweiterung können Sie die Standardmethode
PostAsync
verwenden:Wo
jsonInString
Wert können Sie durch Anruf erhaltenJsonConvert.SerializeObject(<your object>);
quelle
HttpClient
Erweiterungsmethode (PostAsJsonAsync
), um den zweiten Weg zu verwenden ? Dies ermöglicht es Ihnen, Code-Wiederholungen zu vermeiden.Ich benutze diese Klasse:
Verwendungsbeispiel:
quelle
Content-Length:
HTTP-Header?HttpClient
Einstellungen ab, z. B. ob ein gesetzterclient.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
Header nicht gesetztTransfer-Encoding: chunked
würde und stattdessen gesetzt würde. Wenn man den Client jedoch wie erstelltvar client = new HttpClient();
, wird der HeaderContent-Length
standardmäßig für diese Inhaltsklasse festgelegt.Ich würde der akzeptierten Antwort hinzufügen, dass Sie auch den
Accept
Header zumhttpClient
:quelle
Sie haben Recht, dass dies in .NET Core längst implementiert ist.
Zum Zeitpunkt des Schreibens (September 2019) wurde die
project.json
Datei von NuGet 3.x + durch ersetztPackageReference
(wie unter https://docs.microsoft.com/en-us/nuget/archive/project-json erläutert ).Um auf die
*Async
Methoden derHttpClient
Klasse zugreifen zu können ,.csproj
muss Ihre Datei korrekt konfiguriert sein.Öffnen Sie Ihre
.csproj
Datei in einem Nur-Text-Editor und stellen Sie sicher, dass die erste Zeile<Project Sdk="Microsoft.NET.Sdk.Web">
(wie unter https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the angegeben) angezeigt wird -csproj-Format ).
Um auf die
*Async
Methoden derHttpClient
Klasse zugreifen zu können , müssen Sie außerdem die richtige Paketreferenz in Ihrer.csproj
Datei haben, wie folgt:(Siehe https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Außerdem: Wir empfehlen Anwendungen für ASP.NET Core 2.1 und Verwenden Sie später das Microsoft.AspNetCore.App-Metapaket ( https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage ).
Methoden wie
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
undDeleteAsync
jetzt der Box funktionieren sollen. (Keine Verwendung der Direktive erforderlich.)Update: Das PackageReference-Tag wird in .NET Core 3.0 nicht mehr benötigt.
quelle