HttpClient в ASP.NET 5.0 не найден?

Используя VS2015 и asp.net 5, когда я пытаюсь скомпилировать свой сайт с помощью экземпляра System.Net.HttpClient, он говорит мне:

Не удалось найти имя типа или пространства имен «HttpClient» (вам не хватает директивы using или ссылки на сборку?)

Наводя курсор на оскорбительный код, я вижу:

"WebApplication1.ASP.NET 5.0 - Available"
"WebApplication1.ASP.NET Core 5.0 - Not Available"

У меня есть 2 фреймворка, перечисленных в моем файле project.json:

"frameworks": {
    "aspnet50": { },
    "aspnetcore50": { }
},

Я предполагаю, что один из них виноват в отсутствии сборки, но я действительно не знаю, как это исправить или как это работает.

Как я могу заставить сайт работать с HttpClient вместо того, чтобы выдавать ошибки? Метод нарушения размещен ниже:

private async Task<string> GetStringFromUri()
{
    using (var httpClient = new HttpClient())
    {
        result = await httpClient.GetStringAsync(
        new Uri("http://baconipsum.com/api/?type=meat-and-filler"));

        viewModel= result;
        return viewModel;
    }
}

person damccull    schedule 14.01.2015    source источник


Ответы (6)


Наконец-то все получилось. @yuval направил меня на правильный путь своим ответом о добавлении зависимостей и указанием на то, что класс существует на github. Дальнейшие поиски привели меня к выводу, что класс, похоже, еще не включен в предварительную версию, и мне пришлось добавить этот репозиторий nuget в свой проект: https://www.myget.org/gallery/aspnetvnext

В этом репозитории есть ночные сборки пакетов asp.net vnext nuget, которые содержат нужный мне класс. Добавление следующей строки в мой основной раздел зависимостей и в оба раздела зависимостей фреймворков заставило меня работать: «Microsoft.Net.Http.Client»: «1.0.0.0-rc1-10049»

"dependencies": {
    [...],
    "Microsoft.Net.Http.Client": "1.0.0.0-rc1-10049"
},
"frameworks": {
    "aspnet50": {
        "dependencies": {
            "Microsoft.Net.Http.Client": "1.0.0-rc1-10049"
        }
    },
    "aspnetcore50": {
        "dependencies": {
            "Microsoft.Net.Http.Client": "1.0.0-rc1-10049"
        }
    }
} 
person damccull    schedule 17.01.2015
comment
Не забудьте добавить myget.org/gallery/aspnetvnext источник пакета nuget первым в списке или иначе это не сработает. Единственный способ, которым я это понял, - снять все остальные источники пакетов. Я использовал графический интерфейс Manage Nuget Packages для его установки, и он добавил зависимость только к зависимостям верхнего уровня, а не к зависимостям фреймворка. Я использую Visual Studio 2015 CTP6. - person Philip Holly; 07.04.2015
comment
Также HttpClient находится в System.Net.Http. Странно то, что когда я удалил Microsoft.Net.Http.Client и попытался добавить System.Net.Http (бета-версия 4.0.0 от aspnetvnext), я увидел его в дереве зависимостей в обозревателе решений, но HttpClient отсутствовал. Однако установка Microsoft.Net.Http.Client, который зависит от System.Net.Http 4.0.0-beta, работает. - person Philip Holly; 07.04.2015
comment
Последняя версия теперь 1.0.0-beta3-10053. - person Stef Heyenrath; 19.04.2015
comment
Как настроить это для работы с Azure? При развертывании сайта Azure не знает, что нужно искать в новом источнике пакета, и выдает ошибку Не удается найти Microsoft.Net.Http.Client ›= 1.0.0-beta8-15501. Кажется, я не могу найти нигде, где описано, как это сделать для Azure: github.com/aspnet/Home/wiki/ - person Marchy; 11.10.2015
comment
Это устаревший ответ - person Boris Lipschitz; 30.12.2015
comment
@BorisLipschitz Я только что использовал это сегодня, чтобы исправить проблему в Visual Studio 2015 Enterprise, которая полностью обновлена. - person krillgar; 03.02.2016

Сегодня я столкнулся с той же проблемой, и в 2016 году решение стало несколько проще.

Больше не требуется добавлять новый репозиторий Nuget.

При добавлении System.Net.Http (текущая версия 4.0.1-beta-23516) вы все равно получите ту же ошибку, если вы ориентируетесь на clr, а также на версию основной платформы, поэтому необходимо скопировать зависимость в список зависимостей dnxcore framework, чтобы получить ваш код компиляции.

До:

"frameworks": {
    "dnx451": { 
      "dependencies": {
        "System.Net.Http": "4.0.1-beta-23516"
      }
     },
    "dnxcore50": { }
  }

После:

"frameworks": {
    "dnx451": {
      "dependencies": {
        "System.Net.Http": "4.0.1-beta-23516"
      }
    },
    "dnxcore50": {
      "dependencies": {
        "System.Net.Http": "4.0.1-beta-23516"
      }
    }
  }
person Marco    schedule 13.02.2016

Вам нужно добавить новый источник в диспетчер пакетов nuget (https://www.myget.org/F/aspnetvnext), а затем добавьте зависимости в файл project.json. Как для dnx451, так и для dnxcore50:

{
   "frameworks": {
       "dnx451": {
         "frameworkAssemblies": {
             "Microsoft.Net.Http.Client": "1.0.0-beta3-10053"
              }
         },
         "dnxcore50": {
            "frameworkAssemblies": {
               "Microsoft.Net.Http.Client": "1.0.0-beta3-10053"
               }
          }
 }

Он реализован как часть пакета ASP.Net xNext, как указано на github:

Полностью управляемая реализация HttpMessageHandler на основе сокетов.

Этот проект является частью ASP.NET vNext. Вы можете найти образцы, документацию и инструкции по началу работы с ASP.NET vNext в домашнем репозитории.

Полное пошаговое руководство можно найти по адресу здесь

person Yuval Itzchakov    schedule 14.01.2015
comment
Спасибо за помощь в этом. Я попробую позже сегодня вечером. Не могли бы вы объяснить, как я могу найти такие зависимости для c # 6, поскольку на веб-сайтах Microsoft еще нет документов? - person damccull; 15.01.2015
comment
@damccull Я бы посоветовал взглянуть на ветвь разработки ASP.NET vNext - person Yuval Itzchakov; 15.01.2015
comment
Благодаря тонну. Как только у меня появится возможность попробовать этот код, я отмечу это как ответ. - person damccull; 15.01.2015
comment
Оказывается, у меня такое же сообщение после установки таких зависимостей. Как будто HttpClient больше не существует или еще не написан для новой системы. Любые другие предложения? Моя конечная цель - загрузить json с URL-адреса. - person damccull; 15.01.2015
comment
После поиска я обнаружил, что это новое имя зависимости: netfx-System.Net.Http.HttpEntityClient: 1.2.0 - person Steven; 28.03.2015
comment
это устаревший ответ - person Boris Lipschitz; 30.12.2015

Сегодня у меня возникли проблемы с поиском в RC1:

Для всех, кто найдет этот вопрос оттуда, HttpClient теперь находится в пространстве имен System.Net.Http.

person Kevin Stricker    schedule 19.11.2015

Просто добавьте это в свой project.json

"dependencies": {
    ...
    "Microsoft.Net.Http": "2.2.7-beta"
},

или любая последняя версия.

person Alkasai    schedule 10.02.2015
comment
На какой фреймворк вы ориентируетесь? Добавил ссылку пока не нашел. - person user3285954; 30.10.2015
comment
@user3285954 user3285954 в то время, когда мы работаем с бета-версией DNX 8, и я не вижу, чтобы мы явно ссылались на библиотеку Microsoft.Net.Http. Но в бета-версии 4 мы использовали "Microsoft.Net.Http": "2.2.7-beta" - person Alkasai; 02.11.2015

Для меня в этой ветке отсутствовала ссылка ... вам нужно добавить https://www.myget.org/gallery/aspnetvnext источник NuGet, но фактический URL-адрес фида NuGet для этого 'https://www.myget.org/F/aspnetvnext/'. Как только у вас есть это в качестве источника самородков, все остальное оживает.

Кроме того, на момент написания (17 июня 2015 г.) версия была «Microsoft.Net.Http.Client»: «1.0.0-beta3-10053».

Вам также потребуется использовать обновленный раздел «фреймворки» из редактирования Matt DeKreys от 7 июня (dnx451 и dnxcore50).

person Martin Kearn    schedule 17.06.2015