System.Net.Http: отсутствует в пространстве имен? (с использованием .net 4.5)

103

TL; ДР: Я новичок в этом языке и понятия не имею, что делаю

вот мой класс:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;

public class MyClass
    {
        private const string URL = "https://sub.domain.com/objects.json?api_key=123";
        private const string data = @"{""object"":{""name"":""Title""}}";

        public static void CreateObject()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
            requestWriter.Write(data);
            requestWriter.Close();

            try
            {
                // get the response
                WebResponse webResponse = request.GetResponse();
                Stream webStream = webResponse.GetResponseStream();
                StreamReader responseReader = new StreamReader(webStream);
                string response = responseReader.ReadToEnd();
                responseReader.Close();
            }
            catch (WebException we)
            {
                string webExceptionMessage = we.Message;
            }
            catch (Exception ex)
            {
                // no need to do anything special here....
            }
        }

        static void Main(string[] args)
        {
            MyClass.CreateObject();
        }
}

когда я делаю csc filename.cs, я получаю следующую ошибку:

Тип или имя пространства имен Http не существует в пространстве имен System.Net (вам не хватает ссылки на сборку?)

NullVoxPopuli
источник
Вы пытаетесь получить доступ к нестатическому полю из статического метода ( webClientполя). Кроме того, вы никогда не используете его ни для чего. Вы могли бы просто удалить его.
Cᴏʀʏ 08

Ответы:

108

HttpClientживет в System.Net.Httpпространстве имен.

Вам нужно будет добавить:

using System.Net.Http;

И убедитесь, что вы ссылаетесь System.Net.Http.dllна .NET 4.5.


Опубликованный код, похоже, ничего не делает с webClient. Что-то не так с кодом, который фактически компилируется HttpWebRequest?


Обновить

Чтобы открыть диалоговое окно « Добавить ссылку », щелкните правой кнопкой мыши проект в обозревателе решений и выберите « Добавить ссылку ...» . Это должно выглядеть примерно так:

введите описание изображения здесь

М. Бэбкок
источник
9
Я только что установил .NET 4.5, и он говорит, что имя пространства имен «Http» не существует в пространстве имен «System.Net»
NullVoxPopuli 08
1
Вы уверены, что ваш проект ориентирован на .NET 4.5 и что вы добавили ссылку System.Net.Http.dll?
M.Babcock 08
3
Эм ... нет, не будет. Щелкните правой кнопкой мыши свой проект в обозревателе решений и щелкните, Add Referencesкогда появится диалоговое окно, выберите крайнюю левую вкладку (я не использую встроенное диалоговое окно ссылок, но мое называется « Сборки» ). Прокрутите список до тех пор, пока не увидите элемент с названием System.Net.Httpдважды щелкните его и перестройте.
M.Babcock 08
1
Безусловно. Вот некоторая документация от MSDN для этого. Дайте мне знать, если у вас возникнут проблемы.
M.Babcock 08
1
Вы работаете над решением с несколькими проектами? Вы уверены, что сборка System.Net.Http установлена ​​в проекте, содержащем просматриваемый вами файл? Вы можете настроить, какие проекты загружать какие пакеты nuget в диспетчере пакетов
Haymaker87
82

NuGet> Пакет Microsoft.AspNet.WebApi.Client

user1662812
источник
4
Это в значительной степени решило проблему для меня. Я установил этот пакет: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst
3
Принятый ответ (добавление ссылки) мне не помог, но это помогло. Спасибо.
adinas
1
Это правильный подход. Добавление ссылки на dll может вызвать проблемы на сервере сборки. Правильный пакет nuget решит проблему.
Darth Coder
16

Как я это решил.

  1. Откройте проект (!) «Свойства», выберите «Приложение», выберите целевой фреймворк «.Net Framework 4.5».
  2. Щелкните правой кнопкой мыши свой проект -> Добавить ссылку
  3. Убедитесь, что в «Сборки» -> «Расширения» опция «System.Net.Http» не отмечена
  4. Перейдите в «Сборки» -> «Framework» и выберите параметры «System.Net.Http» и «System.Net.Http».
  5. Все!

В моем случае у меня в начале был .Net 4.0 и «Сборки» -> «Расширения», опция «System.Net.Http» с версией 2.0.0.0. После моих действий «Сборки» -> «Фреймворк» в параметрах «System.Net.Http» и «System.Net.Http» была одна и та же версия 4.0.0.0.

LagiNatoRRR
источник
это тоже была проблема для меня, он не отображал ссылку "System.Net.Http", пока я не
обновился
10

Консоль диспетчера пакетов Visual Studio> Install-Package Microsoft.AspNet.WebApi.Client

копье
источник
5

Предполагая, что вы используете Visual Studio 10, вы можете загрузить установку, включающую System.Net.Http, для Visual Studio 10 здесь: скачать MVC4 для VS10

После установки щелкните правой кнопкой мыши папку « Ссылки » в VS Project и выберите « Добавить ссылку» . Затем выберите вкладку Обзор . Перейдите к пути установки сборок для установки MVC4 (обычно в Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / Assemblies) и выберите сборку с именем «System.Net.Http.dll». Теперь вы можете добавить «using System.Net.Http» в начало кода и начать создание подключений HttpClient.

Уссабин
источник
5

просто перейдите, чтобы добавить ссылку, затем добавьте

system.net.http

введите описание изображения здесь

Хусейн Альрубайе
источник
3

У вас должна быть ссылка на System.Web.Httpсборку, в которой есть HTTPClientкласс, который вы пытаетесь использовать. Попробуйте добавить строку ниже перед объявлением класса

using System.Web.Http;

Если ошибка по-прежнему появляется, попробуйте сделать это в Visual Studio

  1. Щелкните правой кнопкой мыши папку «Ссылки» в вашем проекте.
  2. Выберите Добавить ссылку.
  3. Выберите вкладку .NET (или нажмите кнопку «Обзор», если это не сборка .NET Framework).
  4. Дважды щелкните сборку, содержащую пространство имен, в сообщении об ошибке (System.Web.Http.dll ).
  5. Нажмите кнопку ОК.
Ахил
источник
@TheLindyHop: вы можете попробовать выполнить шаги в обновленном ответе?
Ахил
@Akhil - HttpClientпринадлежит System.Web.Http.dllсборке .NET 4.5 (не System.Net).
M.Babcock 08
@ M.Babcock: спасибо, что сообщили мне. Ive обновил ответ :)
Akhil
Как мне показать папку ссылок? Я начал с файла: за пределами любого проекта = \
NullVoxPopuli 08
хорошо, щелкните правой кнопкой мыши свой проект и выберите Properties. Вы должны увидеть Referencesслева.
Ахил
2

Вам понадобится using System.Net.Httpнаверху.

Кейт Николас
источник
1

HttpClient является новым в .NET 4.5. Вероятно, вам следует использовать HttpWebRequest .

Кибби
источник
Код, включенный в вопрос, уже используется HttpWebRequest, но не уверен, почему они его не используют.
M.Babcock 08
Согласовано. HTTPClient объявляется, но никогда не используется. Очень странно.
Kibbee 08
У меня проблема с пространством имен для него. используя System.Net.Http; приводит к ошибке «Http» не существует в пространстве имен «System.Net»
NullVoxPopuli 08
Вы уверены, что используете компилятор .Net 4.5?
Kibbee 08
0

Решить проблему :

  1. Перейдите в обозреватель решений.
  2. Щелкните правой кнопкой мыши имя проекта и выберите добавить
  3. Выберите ссылки и разрешите.Net framework 4.5закончить загрузку
  4. Прокрутите вниз, выберите System.Net.Httpи нажмите ОК.

Задача решена.

boakye_wozniac
источник
0

Для меня это сделало свойство "Копировать локальное" как True для ссылки. Разверните «Ссылки», щелкните правой кнопкой мыши System.Net.Http и измените значение свойства «Копировать локальное» на «Истина» в окне свойств. Я использую VS2019.

Goodmedalist
источник
0

Убедитесь, что он указан в вашем web.config:

Кочевник77
источник
0

С помощью диспетчера пакетов Nuget установите Microsoft.AspNet.WebApi.Core.

После этого:

using System.Web.Http;

или если вы используете VB

imports System.Web.Http

в ярости
источник
-1

В Visual Studio вы можете использовать nuget для загрузки пакета

Microsoft.AspNet.WebApi.WebHost
Цетин Сахин
источник