Chcę wysłać obiekt dynamiczny, taki jak
new { x = 1, y = 2 };
jako treść wiadomości HTTP POST. Więc staram się pisać
var client = new HttpClient();
ale nie mogę znaleźć metody
client.PostAsJsonAsync()
Próbowałem więc dodać pakiet Microsoft.AspNetCore.Http.Extensions do project.json i dodać
using Microsoft.AspNetCore.Http.Extensions;
klauzula use. Jednak to mi nie pomogło.
Jaki jest więc najłatwiejszy sposób wysyłania żądania POST z treścią JSON w ASP.NET Core?
Odpowiedzi:
Należy dodać odniesienie do pakietu „Microsoft.AspNet.WebApi.Client” (przykłady można znaleźć w tym artykule ).
Bez dodatkowego rozszerzenia możesz skorzystać ze standardowej
PostAsync
metody:gdzie
jsonInString
wartość można uzyskać dzwoniącJsonConvert.SerializeObject(<your object>);
źródło
HttpClient
metody rozszerzającej (PostAsJsonAsync
), aby używać drugiego sposobu. Pozwala uniknąć powtórzeń kodu.Używam tej klasy:
Próbka użycia:
źródło
Content-Length:
nagłówek HTTP?HttpClient
ustawień, np. Czy jedenclient.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
nagłówek zestawu nie zostałby ustawiony iTransfer-Encoding: chunked
zostałby ustawiony zamiast tego. Jeśli jednak utworzy się klientavar client = new HttpClient();
, nagłówekContent-Length
zostanie domyślnie ustawiony dla tej klasy zawartości.Dodałbym do zaakceptowanej odpowiedzi, że chciałbyś również dodać
Accept
nagłówek dohttpClient
:źródło
Masz rację, że zostało to już dawno zaimplementowane w .NET Core.
W chwili pisania tego tekstu (wrzesień 2019 r.)
project.json
Plik NuGet 3.x + został zastąpiony przezPackageReference
(jak wyjaśniono na https://docs.microsoft.com/en-us/nuget/archive/project-json ).Aby uzyskać dostęp do
*Async
metodHttpClient
klasy,.csproj
plik musi być poprawnie skonfigurowany.Otwórz
.csproj
plik w zwykłym edytorze tekstu i upewnij się, że pierwsza linia jest<Project Sdk="Microsoft.NET.Sdk.Web">
(jak wskazano na https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-format ).
Aby uzyskać dostęp do
*Async
metodHttpClient
klasy, musisz również mieć w swoim pliku poprawne odwołanie do pakietu.csproj
, na przykład:(Zobacz https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Ponadto: zalecamy aplikacje ukierunkowane na ASP.NET Core 2.1 i później użyj metapakietu Microsoft.AspNetCore.App , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )
Metody takie jak
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
iDeleteAsync
powinien działać po wyjęciu z pudełka. (Nie jest wymagana dyrektywa using).Aktualizacja: tag PackageReference nie jest już potrzebny w programie .NET Core 3,0.
źródło