Eu quero enviar objetos dinâmicos como
new { x = 1, y = 2 };
como corpo da mensagem HTTP POST. Então eu tento escrever
var client = new HttpClient();
mas não consigo encontrar o método
client.PostAsJsonAsync()
Tentei adicionar o pacote Microsoft.AspNetCore.Http.Extensions ao project.json e adicionar
using Microsoft.AspNetCore.Http.Extensions;
usa a cláusula No entanto, não me ajudou.
Então, qual é a maneira mais fácil de enviar solicitação POST com o corpo JSON no ASP.NET Core?
c#
asp.net-core
.net-core
Rem
fonte
fonte
Respostas:
Você deve adicionar referência ao pacote "Microsoft.AspNet.WebApi.Client" (leia este artigo para obter exemplos).
Sem nenhuma extensão adicional, você pode usar o
PostAsync
método padrão :onde o
jsonInString
valor que você pode obter chamandoJsonConvert.SerializeObject(<your object>);
fonte
HttpClient
método de extensão (PostAsJsonAsync
) para usar a segunda maneira. Permite evitar a repetição de código.Eu uso esta classe:
Amostra de uso:
fonte
Content-Length:
cabeçalho HTTP?HttpClient
configurações, por exemplo, se umclient.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
cabeçalho de conjunto não for definido eTransfer-Encoding: chunked
, em vez disso, será definido. No entanto, se alguém criar o cliente comovar client = new HttpClient();
, o cabeçalhoContent-Length
será definido para esta classe de conteúdo por padrão.Eu acrescentaria à resposta aceita que você também desejaria adicionar o
Accept
cabeçalho aohttpClient
:fonte
Você está certo de que isso há muito tempo foi implementado no .NET Core.
No momento da redação deste artigo (setembro de 2019), o
project.json
arquivo do NuGet 3.x + foi substituídoPackageReference
(conforme explicado em https://docs.microsoft.com/en-us/nuget/archive/project-json ).Para obter acesso aos
*Async
métodos daHttpClient
classe, seu.csproj
arquivo deve estar configurado corretamente.Abra seu
.csproj
arquivo em um editor de texto sem formatação e verifique se a primeira linha está<Project Sdk="Microsoft.NET.Sdk.Web">
(conforme indicado em https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-format ).
Para obter acesso aos
*Async
métodos daHttpClient
classe, você também precisa ter a referência correta do pacote em seu.csproj
arquivo, da seguinte maneira:(Consulte https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Além disso: recomendamos aplicativos direcionados ao ASP.NET Core 2.1 e posteriormente use o metapacote Microsoft.AspNetCore.App , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )
Métodos como
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
eDeleteAsync
agora deve funcionar fora da caixa. (Nenhuma diretiva de uso é necessária.)Atualização: a marca PackageReference não é mais necessária no .NET Core 3.0.
fonte