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.