Я пытаюсь вызвать веб-API из моего веб-приложения. Я использую .Net 4.5 и при написании кода я получаю сообщение об ошибке HttpClient
не содержит PostAsJsonAsync
метод определения .
Ниже приведен код:
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;
и я получаю сообщение об ошибке:
Ошибка: «System.Net.Http.HttpClient» не содержит определения для «PostAsJsonAsync» и не найден метод расширения «PostAsJsonAsync», принимающий первый аргумент типа «System.Net.Http.HttpClient» (если вы пропустили используя директиву или ссылку на сборку?)
Пожалуйста, посмотрите и посоветуйте мне.
c#
json
asp.net-web-api
dotnet-httpclient
Джидиш Раджан
источник
источник
Ответы:
Да, вам нужно добавить ссылку на
Это можно найти в области сборок расширений.
Хороший способ добиться этого - добавить пакет NuGet
Microsoft.AspNet.WebApi.Client
в свой проект.источник
PostAsJsonAsync
больше нет вSystem.Net.Http.dll
(.NET 4.5.2). Вы можете добавить ссылку наSystem.Net.Http.Formatting.dll
, но на самом деле это относится к более старой версии. Я столкнулся с проблемами на нашем сервере сборки TeamCity, эти два не будут сотрудничать вместе.Кроме того, вы можете заменить
PostAsJsonAsync
наPostAsync
вызов, который является просто частью новой DLL. замещатьС участием:
Обратите внимание , что
JavaScriptSerializer
находится в пространстве имен:System.Web.Script.Serialization
.Вам нужно будет добавить ссылку на сборку в вашем csproj:
System.Web.Extensions.dll
См. Https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836.
источник
await FooAsync()
вместоFooAsync().Result
. Последний может зайти в тупик. См. Stackoverflow.com/q/17248680/2272514 и его принятый ответ. Есть также хорошие ссылки о деталях.Недостающая ссылка - это
System.Net.Http.Formatting.dll
. Но лучшее решение - добавить пакет NuGet,Microsoft.AspNet.WebApi.Client
чтобы версия dll форматирования работала с версией .NET FrameworkSystem.Net.Http
в моем проекте.источник
Как уже обсуждалось, этот метод больше не доступен с .NET 4.5.2. Чтобы расширить ответ Jeroen K, вы можете сделать метод расширения:
Теперь вы можете звонить
client.PostAsJsonAsync("api/AgentCollection", user)
.источник
У меня тоже была эта проблема в проекте, который я только что извлек из системы контроля версий.
Симптомом была ошибка, описанная выше, и желтый предупреждающий треугольник со ссылкой на
System.Net.Http.Formatting
Чтобы это исправить, я удалил неработающую ссылку, а затем использовал NuGet для установки последней версии
Microsoft.AspNet.WebApi.Client
.источник
Install-Package Microsoft.AspNet.WebApi.Client
Я знаю, что этот ответ слишком поздно, у меня была та же проблема, и я добавлял
System.Net.Http.Formatting.Extension
Nuget, после проверки здесь и там я обнаружил, что Nuget добавлен, ноSystem.Net.Http.Formatting.dll
не был добавлен в ссылки, я просто переустановил Nugetисточник
Попробуйте установить в свой проект пакет NuGet: Microsoft.AspNet.WebApi.Client:
источник
Вместо написания такого количества кода для простого вызова вы можете использовать одну из оболочек, доступных через Интернет.
Я написал один под названием WebApiClient, доступный на NuGet ... проверить это!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
источник
Если вы играете в Blazor и получаете сообщение об ошибке, вам нужно добавить пакет
Microsoft.AspNetCore.Blazor.HttpClient
.источник
Просто расширив ответ Йеруна советами в комментариях:
источник