HttpClient не поддерживает метод PostAsJsonAsync С#

Я пытаюсь вызвать веб-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 используя директиву или ссылку на сборку?)

Пожалуйста, посмотрите и посоветуйте мне.

Ответ 1

Да, вам нужно добавить ссылку на

System.Net.Http.Formatting.dll

Это можно найти в области сборок расширений.

Хорошим способом достижения этого является добавление пакета NuGet Microsoft.AspNet.WebApi.Client в ваш проект.

Ответ 2

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.

Ответ 3

Отсутствует ссылка System.Net.Http.Formatting.dll. Но лучшим решением является добавление пакета NuGet Microsoft.AspNet.WebApi.Client, чтобы версия dll для форматирования работала с версией .NET Framework System.Net.Http в моем проекте.

Ответ 4

Как уже 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).

Ответ 5

У меня тоже была эта проблема в проекте, который я только что проверил из источника.

Симптомом была ошибка, описанная выше, и желтый треугольник предупреждения по ссылке System.Net.Http.Formatting

Чтобы исправить это, я удалил неработающую ссылку, а затем использовал NuGet для установки последней версии Microsoft.AspNet.WebApi.Client.

Ответ 6

Я знаю, что этот ответ слишком поздний, у меня была такая же проблема, и я добавлял System.Net.Http.Formatting.Extension Nuget, после проверки здесь и там я обнаружил, что Nuget добавлен, но System.Net.Http.Formatting.dll не был добавлен в ссылки, Я просто переустановил Nuget

Ответ 7

Вместо написания такого количества кода, чтобы сделать простой вызов, вы можете использовать одну из оболочек, доступных через Интернет.

Я написал один под названием WebApiClient, доступный на NuGet... проверить это!

https://www.nuget.org/packages/WebApiRestService.WebApiClient/

Ответ 8

Попробуйте установить в свой проект пакет NuGet: Microsoft.AspNet.WebApi.Client:

Install-Package Microsoft.AspNet.WebApi.Client