Estou tentando chamar uma API da web do meu aplicativo da web. Estou usando o .net 4.5 e, ao escrever o código, estou recebendo o erro HttpClient
não contém um PostAsJsonAsync
método de definição .
Abaixo está o código:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
e estou recebendo a mensagem de erro:
Erro: 'System.Net.Http.HttpClient' não contém uma definição para 'PostAsJsonAsync' e nenhum método de extensão 'PostAsJsonAsync' aceitando um primeiro argumento do tipo 'System.Net.Http.HttpClient' pode ser encontrado (está faltando um usando diretiva ou uma referência de montagem?)
Por favor, dê uma olhada e me aconselhar.
c#
json
asp.net-web-api
dotnet-httpclient
Jidheesh Rajan
fonte
fonte
Respostas:
Sim, você precisa adicionar uma referência a
Isso pode ser encontrado na área de montagens de extensões.
Uma boa maneira de conseguir isso é adicionando o pacote NuGet
Microsoft.AspNet.WebApi.Client
ao seu projeto.fonte
PostAsJsonAsync
não está mais noSystem.Net.Http.dll
(.NET 4.5.2). Você pode adicionar uma referência aSystem.Net.Http.Formatting.dll
, mas isso realmente pertence a uma versão mais antiga. Eu tive problemas com isso no nosso servidor de construção TeamCity, esses dois não cooperaram juntos.Como alternativa, você pode substituir
PostAsJsonAsync
por umaPostAsync
chamada, que é apenas parte da nova dll. SubstituirCom:
Note-se que
JavaScriptSerializer
é no espaço de nomes:System.Web.Script.Serialization
.Você precisará adicionar uma referência de montagem no seu csproj:
System.Web.Extensions.dll
Consulte https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
fonte
await FooAsync()
vez deFooAsync().Result
. O último pode entrar em conflito. Consulte stackoverflow.com/q/17248680/2272514 e sua resposta aceita. Também existem bons links sobre detalhes.A referência ausente é o
System.Net.Http.Formatting.dll
. Mas a melhor solução é adicionar o pacote NuGetMicrosoft.AspNet.WebApi.Client
para garantir que a versão da DLL de formatação funcione com a versão do .NET framework doSystem.Net.Http
meu projeto.fonte
Como já debatido, esse método não está mais disponível desde o .NET 4.5.2. Para expandir a resposta de Jeroen K, você pode criar um método de extensão:
Agora você pode ligar
client.PostAsJsonAsync("api/AgentCollection", user)
.fonte
Eu também tive esse problema em um projeto que acabei de fazer check-out no controle de origem.
O sintoma foi o erro descrito acima e um triângulo de advertência amarelo em uma referência a
System.Net.Http.Formatting
Para corrigir isso, removi a referência quebrada e usei o NuGet para instalar a versão mais recente do
Microsoft.AspNet.WebApi.Client
.fonte
Install-Package Microsoft.AspNet.WebApi.Client
Sei que esta resposta é tarde demais, tive o mesmo problema e estava adicionando o
System.Net.Http.Formatting.Extension
Nuget, depois de verificar aqui e ali descobri que o Nuget foi adicionado, masSystem.Net.Http.Formatting.dll
não foi adicionado às referências, apenas reinstalei o Nugetfonte
Tente instalar no seu projeto o pacote NuGet: Microsoft.AspNet.WebApi.Client:
fonte
Em vez de escrever essa quantidade de código para fazer uma chamada simples, você pode usar um dos wrappers disponíveis na Internet.
Eu escrevi um chamado WebApiClient, disponível no NuGet ... confira!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
fonte
Se você estiver brincando no Blazor e receber o erro, precisará adicionar o pacote
Microsoft.AspNetCore.Blazor.HttpClient
.fonte
Apenas expandindo a resposta de Jeroen com as dicas nos comentários:
fonte