Системы'.Чистая.Протоколу HTTP.HttpContent' не содержит определение для 'ReadAsAsync', а не метод расширения


Я сделал консольное приложение, чтобы использовать веб-API, который я только что сделал. Код консольного приложения не компилируется. Это дает мне ошибку компиляции:

'System.Net.Http.HttpContent' does not contain a definition for 
'ReadAsAsync' and no extension method 'ReadAsAsync' accepting a 
first argument of type 'System.Net.Http.HttpContent' could be 
found (are you missing a using directive or an assembly reference?)

вот метод тестирования, в котором эта ошибка возникает.

static IEnumerable<Foo> GetAllFoos()
{
  using (HttpClient client = new HttpClient())
  {
    client.DefaultRequestHeaders.Add("appkey", "myapp_key");

    var response = client.GetAsync("http://localhost:57163/api/foo").Result;

    if (response.IsSuccessStatusCode)
      return response.Content.ReadAsAsync<IEnumerable<Foo>>().Result.ToList();
  }

  return null;
}

я использовал этот метод и потреблял его из клиента MVC.

6 69

6 ответов:

после долгой борьбы, я нашел решение.

устранение: добавить ссылку System.Net.Http.Formatting.dll. Эта сборка также доступна в C:\Program файлы\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies.

метод ReadAsAsync - Это метод расширения, объявленный в классе HttpContentExtensions, который находится в пространстве имен System.Net.Http в библиотеке System.Net.Http.Formatting.

рефлектор пришел на помощь!

убедитесь, что вы установили correct NuGet package в консольном приложении:

<package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" />

и что вы нацелены по крайней мере .NET 4.0.

как говорится, ваш GetAllFoos функция определена для возврата IEnumerable<Prospect> а в ReadAsAsync метод, который вы передаете IEnumerable<Foo> которые, очевидно, не являются совместимыми типами.

Install-Package Microsoft.AspNet.WebApi.Client

Select project in project manager console

добавление ссылки на System.Net.Http.Formatting.dll может вызвать проблемы несоответствия DLL. Прямо сейчас, System.Net.Http.Formatting.dll появляется ссылка на версию 4.5.0.0 Newtonsoft.формат JSON.DLL, тогда как последняя версия-6.0.0.0. Это означает, что вам также нужно будет добавить перенаправление привязки, чтобы избежать исключения сборки .NET, если вы ссылаетесь на последний пакет Newtonsoft NuGet или DLL:

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
 </dependentAssembly> 

таким образом, альтернативное решение для добавления ссылки на System.Net.Http.Formatting.dll это прочитать ответ в виде строки, а затем десеарализовать себя с помощью JsonConvert.DeserializeObject (responseAsString). Полный метод будет:

public async Task<T> GetHttpResponseContentAsType(string baseUrl, string subUrl)
{
     using (var client = new HttpClient())
     {
         client.BaseAddress = new Uri(baseUrl);
         client.DefaultRequestHeaders.Accept.Clear();
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

         HttpResponseMessage response = await client.GetAsync(subUrl);
         response.EnsureSuccessStatusCode();
         var responseAsString = await response.Content.ReadAsStringAsync();
         var responseAsConcreteType = JsonConvert.DeserializeObject<T>(responseAsString);
         return responseAsConcreteType;
      }
}

или если у вас есть VS 2012, Вы можете перейти в консоль диспетчера пакетов и ввести Установка Пакета Microsoft.сеть САШ.Веб-API.Клиент

Это позволит загрузить последнюю версию пакета

  • Если вы не можете найти ссылку на сборку из when (щелкните правой кнопкой мыши ссылку - > Добавить необходимую сборку)

попробуйте это консоль диспетчера пакетов
Установить-Пакет Системы.Чистая.Протоколу HTTP.Форматирование.Расширение -версия 5.2.3 а затем добавить с помощью добавить ссылку .

используйте эту сборку Reference в вашем проекте

Add a reference to System.Net.Http.Formatting.dll