Ответ 1
Да, вам нужно добавить ссылку на
System.Net.Http.Formatting.dll
Это можно найти в области сборок расширений.
Хорошим способом достижения этого является добавление пакета NuGet Microsoft.AspNet.WebApi.Client в ваш проект.
Я пытаюсь вызвать веб-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" (если вы пропустили a используя директиву или ссылку на сборку?)
Пожалуйста, посмотрите и посоветуйте мне.
Да, вам нужно добавить ссылку на
System.Net.Http.Formatting.dll
Это можно найти в области сборок расширений.
Хорошим способом достижения этого является добавление пакета NuGet Microsoft.AspNet.WebApi.Client в ваш проект.
PostAsJsonAsync
больше не находится в System.Net.Http.dll
(.NET 4.5.2). Вы можете добавить ссылку на System.Net.Http.Formatting.dll
, но на самом деле это относится к более старой версии. Я столкнулся с проблемами на нашем сервере сборки TeamCity, эти два не будут сотрудничать вместе.
Кроме того, вы можете заменить PostAsJsonAsync
на вызов PostAsync
, который является просто частью новой библиотеки DLL. замещать
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
С:
var response = client.PostAsync("api/AgentCollection", new StringContent(
new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;
Обратите внимание, что JavaScriptSerializer
находится в пространстве имен: System.Web.Script.Serialization
.
Вам нужно будет добавить ссылку на сборку в ваш csproj: System.Web.Extensions.dll
См. Https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836.
Отсутствует ссылка System.Net.Http.Formatting.dll
. Но лучшим решением является добавление пакета NuGet Microsoft.AspNet.WebApi.Client
, чтобы версия dll для форматирования работала с версией .NET Framework System.Net.Http
в моем проекте.
Как уже debatted, этот метод больше не доступен с .NET 4.5.2. Чтобы перейти на Jeroen K answer, вы можете сделать метод расширения:
public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(model);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
return await client.PostAsync(requestUrl, stringContent);
}
Теперь вы можете вызвать client.PostAsJsonAsync("api/AgentCollection", user)
.
У меня тоже была эта проблема в проекте, который я только что проверил из источника.
Симптомом была ошибка, описанная выше, и желтый треугольник предупреждения по ссылке System.Net.Http.Formatting
Чтобы исправить это, я удалил неработающую ссылку, а затем использовал NuGet для установки последней версии Microsoft.AspNet.WebApi.Client
.
Я знаю, что этот ответ слишком поздний, у меня была такая же проблема, и я добавлял System.Net.Http.Formatting.Extension
Nuget, после проверки здесь и там я обнаружил, что Nuget добавлен, но System.Net.Http.Formatting.dll
не был добавлен в ссылки, Я просто переустановил Nuget
Вместо написания такого количества кода, чтобы сделать простой вызов, вы можете использовать одну из оболочек, доступных через Интернет.
Я написал один под названием WebApiClient, доступный на NuGet... проверить это!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
Попробуйте установить в свой проект пакет NuGet: Microsoft.AspNet.WebApi.Client:
Install-Package Microsoft.AspNet.WebApi.Client