System.Net.Http: fehlt im Namespace? (mit .net 4.5)

102

TL; DR: Ich bin neu in dieser Sprache und habe keine Ahnung, was ich tue

Hier ist meine Klasse bisher:

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

Wenn ich csc filename.cs mache, erhalte ich den folgenden Fehler:

Der Typ- oder Namespace-Name 'Http' ist im Namespace 'System.Net' nicht vorhanden (fehlt Ihnen eine Assembly-Referenz?)

NullVoxPopuli
quelle
Sie versuchen, über eine statische Methode (das webClientFeld) auf ein nicht statisches Feld zuzugreifen . Außerdem benutzt man es nie für irgendetwas. Sie könnten es wahrscheinlich einfach entfernen.
8.

Antworten:

106

HttpClientlebt im System.Net.HttpNamespace.

Sie müssen hinzufügen:

using System.Net.Http;

Stellen Sie sicher, dass Sie System.Net.Http.dllin .NET 4.5 referenzieren .


Der veröffentlichte Code scheint nichts damit zu tun zu haben webClient. Stimmt etwas mit dem Code nicht, mit dem tatsächlich kompiliert wird HttpWebRequest?


Aktualisieren

Um das Öffnen Verweis hinzufügen Dialog der rechten Maustaste auf Ihr Projekt in Projektmappen - Explorer , und wählen Sie Verweis hinzufügen ... . Es sollte ungefähr so ​​aussehen:

Geben Sie hier die Bildbeschreibung ein

M.Babcock
quelle
9
Ich habe gerade .NET 4.5 installiert und es heißt, dass der Namespace-Name 'Http' im Namespace 'System.Net'
NullVoxPopuli
1
Sind Sie sicher, dass Ihr Projekt auf .NET 4.5 abzielt und dass Sie den Verweis auf hinzugefügt haben System.Net.Http.dll?
M.Babcock
3
Ähm ... nein, wird es nicht. Klicken Sie im Projektmappen- Explorer mit der rechten Maustaste auf Ihr Projekt, und klicken Sie auf, Add Referenceswenn das Dialogfeld angezeigt wird. Wählen Sie die Registerkarte ganz links aus (ich verwende das integrierte Referenzdialogfeld nicht, aber mein Dialogfeld heißt Baugruppen ). Scrollen Sie durch die Liste, bis Sie ein Element namens System.Net.HttpDoppelklick darauf sehen und neu erstellen.
M.Babcock
1
Bestimmt. Hier finden Sie eine Dokumentation von MSDN. Lassen Sie mich wissen, wenn Sie auf Probleme stoßen.
M.Babcock
1
Arbeiten Sie an einer Lösung mit mehreren Projekten? Sind Sie sicher, dass die System.Net.Http-Assembly in dem Projekt installiert ist, das die Datei enthält, die Sie sich ansehen? Sie können anpassen, welche Projekte welche Nuget-Pakete im Paket-Manager laden
Haymaker87
82

NuGet> Microsoft.AspNet.WebApi.Client-Paket

user1662812
quelle
4
Dies hat das Problem für mich ziemlich gelöst. Ich habe dieses Paket installiert: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst
3
Die akzeptierte Antwort (Hinzufügen einer Referenz) hat mir nicht geholfen, aber das hat geholfen. Vielen Dank.
Adinas
1
Dies ist der richtige Ansatz. Das Hinzufügen eines Verweises auf eine DLL kann Probleme auf einem Build-Server verursachen. Mit dem richtigen Nuget-Paket wird das Problem behoben.
Darth Coder
15

Wie ich es gelöst habe.

  1. Öffnen Sie das Projekt (!) "Eigenschaften", wählen Sie "Anwendung", wählen Sie das Targeting-Framework ".Net Framework 4.5".
  2. Klicken Sie mit der rechten Maustaste auf Ihr Projekt -> Referenz hinzufügen
  3. Stellen Sie sicher, dass unter "Baugruppen" -> "Erweiterungen" die Option "System.Net.Http" deaktiviert ist
  4. Gehen Sie zu "Assemblies" -> "Framework" und wählen Sie die Optionen "System.Net.Http" und "System.Net.Http"
  5. Das ist alles!

In meinem Fall hatte ich am Anfang .Net 4.0 und "Assemblies" -> "Extensions" Option "System.Net.Http" mit Version 2.0.0.0. Nach meinen Aktionen hatten "Assemblies" -> "Framework" -Optionen "System.Net.Http" und "System.Net.Http" dieselbe Version 4.0.0.0.

LagiNatoRRR
quelle
das war auch das Problem für mich, es zeigte nicht die Referenz "System.Net.Http", bis ich von .NET 3.5 auf .NET 4.5
FelixJongleur42
10

Visual Studio Package Manager-Konsole> Installationspaket Microsoft.AspNet.WebApi.Client

Lanze-p
quelle
5

Angenommen, Sie verwenden Visual Studio 10, können Sie hier eine Installation herunterladen, die System.Net.Http für Visual Studio 10 enthält: Laden Sie MVC4 für VS10 herunter

Klicken Sie nach der Installation mit der rechten Maustaste auf den Ordner " Referenzen " im VS-Projekt und wählen Sie "Referenz hinzufügen" . Wählen Sie dann das Durchsuchen Registerkarte. Navigieren Sie zu den Baugruppen Installationspfad für die MVC4 installieren ( in der Regel in Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / Baugruppen) und wählen Sie die Assembly mit dem Namen 'System.Net.Http.dll'. Jetzt können Sie Ihr 'using System.Net.Http' oben in Ihren Code einfügen und mit dem Erstellen von HttpClient-Verbindungen beginnen.

Ussabin
quelle
5

Gehen Sie einfach zu Referenz hinzufügen und dann hinzufügen

system.net.http

Geben Sie hier die Bildbeschreibung ein

Hussein Alrubaye
quelle
3

Sie benötigen einen Verweis auf die System.Web.HttpAssembly mit der HTTPClientKlasse, die Sie verwenden möchten. Versuchen Sie, die folgende Zeile vor Ihrer Klassendeklaration hinzuzufügen

using System.Web.Http;

Wenn der Fehler weiterhin auftritt, versuchen Sie dies in Visual Studio

  1. Klicken Sie mit der rechten Maustaste auf den Ordner Referenzen in Ihrem Projekt.
  2. Wählen Sie Referenz hinzufügen.
  3. Wählen Sie die Registerkarte .NET aus (oder klicken Sie auf die Schaltfläche Durchsuchen, wenn es sich nicht um eine .NET Framework-Assembly handelt).
  4. Doppelklicken Sie auf die Assembly, die den Namespace in der Fehlermeldung ( System.Web.Http.dll) enthält.
  5. Drücken Sie die OK-Taste.
Akhil
quelle
@TheLindyHop: Können Sie versuchen, die Schritte in der aktualisierten Antwort zu befolgen?
Akhil
@Akhil - HttpClientgehört zur System.Web.Http.dll.NET 4.5-Assembly (nicht System.Net).
M.Babcock
@ M.Babcock: Danke, dass du mich informiert hast. Ich habe die Antwort aktualisiert :)
Akhil
Wie kann ich den Referenzordner anzeigen lassen? Ich habe mit nur einer Datei begonnen: außerhalb eines Projekts = \
NullVoxPopuli
OK, klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Properties. Sie sollten Referencesauf der linken Seite sehen.
Akhil
2

Du brauchst ein using System.Net.Httpoben.

Keith Nicholas
quelle
1

HttpClient ist neu in .net 4.5. Sie sollten wahrscheinlich HttpWebRequest verwenden .

Kibbee
quelle
Der in der Frage enthaltene Code wird bereits verwendet HttpWebRequest, nicht sicher, warum er nicht verwendet wird.
M.Babcock
Einverstanden. Der HTTPClient wird deklariert, aber nie verwendet. Sehr komisch.
Kibbee
Ich habe ein Problem mit dem Namespace. using System.Net.Http; yeilds der Fehler 'Http' existiert nicht im Namespace 'System.Net'
NullVoxPopuli
Sind Sie sicher, dass Sie den .Net 4.5-Compiler verwenden?
Kibbee
0

Um das Problem zu lösen :

  1. Gehen Sie zu Ihrem Lösungs-Explorer.
  2. Klicken Sie mit der rechten Maustaste auf den Projektnamen und wählen Sie Hinzufügen
  3. Referenzen auswählen und zulassen. Net framework 4.5Laden beenden
  4. Scrollen Sie nach unten und wählen Sie System.Net.Httpund klicken Sie auf OK.

Problem gelöst.

boakye_wozniac
quelle
0

Die Eigenschaft "Copy Local" für die Referenz auf "True" zu setzen, hat dies für mich getan. Erweitern Sie Verweise, klicken Sie mit der rechten Maustaste auf System.Net.Http und ändern Sie den Wert der Eigenschaft "Lokal kopieren" im Eigenschaftenfenster in "Wahr". Ich benutze VS2019.

Goodmedalist
quelle
0

Stellen Sie sicher, dass in Ihrer web.config darauf verwiesen wird:

Nomad77
quelle
0

Installieren Sie mit dem Nuget Package Manager Microsoft.AspNet.WebApi.Core.

Danach:

using System.Web.Http;

oder wenn Sie VB verwenden

imports System.Web.Http

wütend
quelle
-1

In Visual Studio können Sie das Paket mit nuget laden

Microsoft.AspNet.WebApi.WebHost
Cetin Sahin
quelle