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?)

NullVoxPopuli
źródło
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

M.Babcock
źródło
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

user1662812
źródło
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.

LagiNatoRRR
źródło
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

lanca-p
źródło
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.

Ussabin
źródło
5

po prostu przejdź do dodania odniesienia, a następnie dodaj

system.net.http

wprowadź opis obrazu tutaj

Hussein Alrubaye
źródło
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.
Achil
źródło
@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
2

Będziesz potrzebować using System.Net.Httpna górze.

Keith Nicholas
źródło
1

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

Kibbee
źródło
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.

boakye_wozniac
źródło
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.

Goodmedalist
źródło
0

Upewnij się, że odwołuje się do niego w pliku web.config:

Nomad77
źródło
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

rozwścieczony
źródło
-1

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

Microsoft.AspNet.WebApi.WebHost
Cetin Sahin
źródło