Подтвердить что ты не робот

"System.Net.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-клиента.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Убедитесь, что вы установили 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

Выбрать проект в консоли диспетчера проектов

Ответ 3

или если у вас есть VS 2012, вы можете перейти в консоль менеджера пакетов и ввести Install-Package Microsoft.AspNet.WebApi.Client

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

Ответ 4

Добавление ссылки на System.Net.Http.Formatting.dll может вызвать проблемы с несоответствием DLL. Прямо сейчас, System.Net.Http.Formatting.dll, похоже, ссылается на версию 4.5.0.0 Newtonsoft.Json.DLL, тогда как последняя версия 6.0.0.0. Это означает, что вам нужно будет также добавить перенаправление привязки, чтобы избежать исключения .NET Assembly, если вы ссылаетесь на последний пакет 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 должно читать ответ как строку, а затем desearalize себя с 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;
      }
}

Ответ 5

ИСПОЛЬЗОВАНИЕ Этот сборник ссылок в вашем проекте

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

Ответ 6

  • если вы не можете найти ссылку на сборку с того момента, когда (щелкните правой кнопкой мыши по ссылке → добавьте требуемую сборку)

попробуйте это Консоль диспетчера пакетов
Install-Package System.Net.Http.Formatting.Extension -Version 5.2.3 а затем добавить с помощью добавления ссылки.