System.Net.Http: brakuje w przestrzeni nazw? (przy użyciu .net 4.5)


103

TL; DR: Jestem nowy w tym języku i nie mam pojęcia, co robię

oto moja dotychczasowa klasa:

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();
        }
}

kiedy robię csc filename.cs, pojawia się następujący błąd:

Nazwa typu lub przestrzeni nazw „Http” nie istnieje w przestrzeni nazw „System.Net” (czy brakuje odwołania do zestawu?)


Próbujesz uzyskać dostęp do niestatycznego pola za pomocą metody statycznej ( webClientpola). Poza tym nigdy nie używasz go do niczego. Prawdopodobnie mógłbyś go po prostu usunąć.
— Cᴏʀʏ

Odpowiedzi:


108

HttpClientmieszka w System.Net.Httpprzestrzeni nazw.

Musisz dodać:

using System.Net.Http;

I upewnij się, że odwołujesz się System.Net.Http.dlldo .NET 4.5.


Opublikowany kod wydaje się nie robić nic z webClient. Czy jest coś nie tak z kodem, który faktycznie kompiluje się przy użyciu HttpWebRequest?


Aktualizacja

Aby otworzyć Add Reference okna kliknij prawym przyciskiem myszy projektu w Solution Explorer i wybierz Add Reference ... . Powinien wyglądać mniej więcej tak:

wprowadź opis obrazu tutaj


9
Właśnie zainstalowałem .NET 4.5 i jest napisane, że nazwa przestrzeni nazw „Http” nie istnieje w przestrzeni nazw „System.Net”
— NullVoxPopuli

1
Czy na pewno Twój projekt jest przeznaczony dla .NET 4.5 i że dodano odwołanie do System.Net.Http.dll?
— M.Babcock

3
Um ... nie, nie będzie. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i kliknij, Add Referencesgdy pojawi się okno dialogowe, wybierz skrajną lewą kartę (nie używam wbudowanego okna dialogowego odwołań, ale moje nazywa się Zespoły ). Przewiń listę, aż zobaczysz element o nazwie System.Net.Httpkliknij go dwukrotnie i odbuduj.
— M.Babcock

1
Na pewno. Oto dokumentacja z MSDN, jak to zrobić. Daj mi znać, jeśli napotkasz jakieś kłopoty.
— M.Babcock

1
Pracujesz nad rozwiązaniem obejmującym wiele projektów? Czy na pewno zestaw System.Net.Http jest zainstalowany w projekcie zawierającym przeglądany plik? Możesz dostosować, które projekty ładują pakiety nuget w Menedżerze pakietów
— Haymaker87

82

Pakiet NuGet> Microsoft.AspNet.WebApi.Client


4
To prawie rozwiązało problem. Zainstalowałem ten pakiet: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
— Boinst

3
Zaakceptowana odpowiedź (dodanie odniesienia) nie pomogła mi, ale to pomogło. Dzięki.
— adinas

1
To jest właściwe podejście. Dodanie odwołania do biblioteki dll może spowodować problemy na serwerze kompilacji. Posiadanie odpowiedniego pakietu nuget rozwiąże problem.
— Darth Coder

16

Jak to rozwiązałem.

  1. Otwórz projekt (!) „Właściwości”, wybierz „Aplikacja”, wybierz platformę docelową „.Net Framework 4.5”
  2. Kliknij prawym przyciskiem myszy swój projekt -> Dodaj odniesienie
  3. Upewnij się, że w "Assemblies" -> "Extensions" opcja "System.Net.Http" jest odznaczona
  4. Przejdź do „Assemblies” -> „Framework” i wybierz opcje „System.Net.Http” i „System.Net.Http”
  5. To wszystko!

W moim przypadku miałem na początku .Net 4.0 i "Assemblies" -> "Extensions" opcja "System.Net.Http" z wersją 2.0.0.0. Po moich akcjach „Assemblies” -> „Framework” opcje „System.Net.Http” i „System.Net.Http” miały tę samą wersję 4.0.0.0.


to był problem również dla mnie, nie wyświetlało referencji „System.Net.Http” do czasu aktualizacji z .NET 3.5 do .NET 4.5
— FelixJongleur42

10

Konsola Menedżera pakietów programu Visual Studio> Zainstaluj pakiet Microsoft.AspNet.WebApi.Client


5

Zakładając, że korzystasz z programu Visual Studio 10, możesz pobrać instalację, która zawiera System.Net.Http, dla programu Visual Studio 10 tutaj: pobierz MVC4 dla VS10

Po zainstalowaniu kliknij prawym przyciskiem myszy folder References w projekcie VS, a następnie wybierz opcję Dodaj odwołanie . Następnie wybierz kartę Przeglądaj . Przejdź do ścieżki instalacji zestawów dla instalacji MVC4 (zwykle w Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / assemblies) i wybierz zestaw o nazwie „System.Net.Http.dll”. Teraz możesz dodać „using System.Net.Http” u góry kodu i rozpocząć tworzenie połączeń HttpClient.



3

Musisz mieć odniesienie do System.Web.Httpzestawu, który ma HTTPClientklasę, której próbujesz użyć. Spróbuj dodać poniższy wiersz przed deklaracją klasy

using System.Web.Http;

Jeśli nadal otrzymujesz błąd, spróbuj to zrobić w Visual Studio

  1. Kliknij prawym przyciskiem myszy folder References w swoim projekcie.
  2. Wybierz Dodaj odniesienie.
  3. Wybierz kartę .NET (lub przycisk Przeglądaj, jeśli nie jest to zestaw .NET Framework).
  4. Kliknij dwukrotnie zestaw zawierający przestrzeń nazw w komunikacie o błędzie (System.Web.Http.dll ).
  5. Wciśnij przycisk OK.

@TheLindyHop: czy możesz spróbować wykonać czynności podane w zaktualizowanej odpowiedzi?
— Akhil

@Akhil - HttpClientnależy do System.Web.Http.dllzestawu .NET 4.5 (nie System.Net).
— M.Babcock

@ M.Babcock: dzięki za poinformowanie mnie. Zaktualizowałem odpowiedź :)
— Achil

Jak sprawić, by pojawił się folder referencji? Zacząłem od samego pliku: poza jakimkolwiek projektem = \
— NullVoxPopuli

ok, kliknij prawym przyciskiem myszy swój projekt i wybierz Properties. Powinieneś zobaczyć Referencespo lewej stronie.
— Akhil



1

HttpClient jest nowy w .net 4.5. Prawdopodobnie powinieneś używać HttpWebRequest .


Kod zawarty w pytaniu już używa HttpWebRequest, ale nie jestem pewien, dlaczego go nie używają.
— M.Babcock

Zgoda. HTTPClient jest deklarowany, ale nigdy nie jest używany. Bardzo dziwne.
— Kibbee

Mam problem z dołączeniem do niego przestrzeni nazw. using System.Net.Http; yeilds błąd „Http” nie istnieje w przestrzeni nazw „System.Net”
— NullVoxPopuli

Czy na pewno używasz kompilatora .Net 4.5?
— Kibbee

0

Rozwiązać problem :

  1. Przejdź do eksploratora rozwiązań.
  2. Kliknij prawym przyciskiem myszy nazwę projektu i wybierz dodaj
  3. Wybierz odniesienia i zezwól na. Net framework 4.5aby zakończyć ładowanie
  4. Przewiń w dół i wybierz System.Net.Httpi kliknij OK.

Problem rozwiązany.


0

Sprawienie, że właściwość „Kopiuj lokalnie” jest prawdziwa dla odniesienia, zrobiło to za mnie. Rozwiń References, kliknij prawym przyciskiem myszy System.Net.Http i zmień wartość właściwości Copy Local na True w oknie właściwości. Używam VS2019.



0

Za pomocą Menedżera pakietów Nuget zainstaluj Microsoft.AspNet.WebApi.Core.

Po tym:

using System.Web.Http;

lub jeśli używasz VB

imports System.Web.Http



-1

W programie Visual Studio można załadować pakiet za pomocą nuget

Microsoft.AspNet.WebApi.WebHost
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.