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' (не вистачає посилання на збірку?)


Ви намагаєтеся отримати доступ до нестатичного поля статичним методом ( webClientполе). Крім того, ви ніколи насправді не використовуєте ні для чого. Ви, ймовірно, могли просто її видалити.
Cᴏʀʏ

Відповіді:


107

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

Вам потрібно буде додати:

using System.Net.Http;

І переконайтеся, що ви посилаєтесь System.Net.Http.dllу .NET 4.5.


Опублікований код не має нічого спільного webClient. Чи щось не так з кодом, який фактично компілюється за допомогою HttpWebRequest?


Оновлення

Для того, щоб відкрити Add Reference діалогу клацніть правою кнопкою миші на проект в браузері рішень і виберіть Add Reference ... . Це має виглядати приблизно так:

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


9
Щойно я встановив .NET 4.5, і він говорить, що імені простору імен 'Http' не існує в просторі імен 'System.Net'
NullVoxPopuli

1
Ви впевнені, що ваш проект націлений на .NET 4.5 і що ви додали посилання System.Net.Http.dll?
М.Бабкок

3
Гм ... ні, це не буде. Клацніть правою кнопкою миші на вашому проекті в Провіднику рішень і натисніть, Add Referencesколи з'явиться діалогове вікно, виберіть найбільш вліво вкладку (я не використовую вбудований діалог посилань, але мій називається Асамблеї ). Прокручуйте список, поки ви не побачите предмет, який називається System.Net.Httpподвійним клацанням по ньому, та відновіть його.
М.Бабкок

1
Звичайно. Ось деякі документи від MSDN для цього. Повідомте мене, якщо у вас виникнуть проблеми.
М.Бабкок

1
Ви працюєте над рішенням з кількома проектами? Ви впевнені, що збірка System.Net.Http встановлена ​​в проекті, який містить файл, який ви шукаєте? Ви можете налаштувати, які проекти завантажують, які пакунки пакунків в Менеджері пакунків
Haymaker87

82

NuGet> Microsoft.AspNet.WebApi.Client


4
Це в значній мірі вирішило проблему для мене. Я встановив цей пакет: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
Прийнята відповідь (додавання посилання) мені не допомогла, але це зробило. Дякую.
adinas

1
Це правильний підхід. Додавання посилання на dll може спричинити проблеми на сервері збірки. Наявність правильного пакета нугів вирішить проблему.
Дарт Кодер

15

Як я це вирішив.

  1. Відкрийте проект (!) "Властивості", виберіть "Застосування", виберіть рамку націлювання ". Net Framework 4.5"
  2. Клацніть правою кнопкою миші на вашому проекті -> Додати довідку
  3. Переконайтесь, що в "Асамблеї" -> "Розширення" параметр "System.Net.Http" не встановлений
  4. Перейдіть до "Асамблеї" -> "Рамка" та виберіть параметри "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.


це була проблема і для мене, вона не показувала посилання "System.Net.Http", поки я не оновив з .NET 3.5 до .NET 4.5
FelixJongleur42

10

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


5

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

Після встановлення його клацніть правою кнопкою миші на папці References у проекті VS та виберіть Додати посилання . Потім виберіть вкладку Огляд . Перейдіть до шляху установки збірок для встановлення MVC4 (як правило, у файлах програми (x86) / Microsoft ASP.NET/ASP.NET MVC4 / асамблеї) та виберіть збірку під назвою "System.Net.Http.dll". Тепер ви можете додати "за допомогою System.Net.Http" у верхній частині коду і почати створювати з'єднання HttpClient.



3

Потрібно мати посилання на System.Web.Httpзбірку, яка має HTTPClientклас, який ви намагаєтеся використовувати. Спробуйте додати нижній рядок перед оголошенням класу

using System.Web.Http;

Якщо ви все-таки отримали Помилку, спробуйте це зробити Visual Studio

  1. Клацніть правою кнопкою миші на папці References у вашому проекті.
  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: дякую, що повідомили мені. Ive оновив відповідь :)
Ахіл

Як я можу відобразити папку з посиланнями? Я почав лише з файлу: поза будь-яким проектом = \
NullVoxPopuli

Добре, клацніть правою кнопкою миші на своєму проекті та виберіть Properties. Ви повинні побачити Referencesна лівій стороні.
Ахіл



1

HttpClient новий у .net 4.5. Ймовірно, ви повинні використовувати HttpWebRequest .


Код, включений у запитання, вже використовується HttpWebRequest, не впевнений, чому він не використовує його.
М.Бабкок

Домовились. HTTPClient декларується, але ніколи не використовується. Дуже дивно.
Кіббі

У мене є проблема, включаючи простір імен для неї. за допомогою System.Net.Http; yeilds помилка 'Http' не існує в просторі імен 'System.Net'
NullVoxPopuli

Ви впевнені, що використовуєте компілятор .Net 4.5?
Кіббі

0

Щоб вирішити проблему:

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

Проблема вирішена.


0

Здійснення властивості "Копіювати локальне" істинним для посилання зробило це для мене. Розгорніть посилання, клацніть правою кнопкою миші на System.Net.Http та змініть значення властивості Copy Local у True у вікні властивостей. Я використовую VS2019.


0

Переконайтеся, що на нього посилається ваш web.config:


0

За допомогою Nuget Package Manager встановіть Microsoft.AspNet.WebApi.Core.

Після цього:

using System.Web.Http;

або якщо ви використовуєте VB

imports System.Web.Http



-1

У Visual Studio ви можете використовувати nuget для завантаження пакету

Microsoft.AspNet.WebApi.WebHost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.