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


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


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


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.


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


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.



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.

@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



1

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


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.


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.


0

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


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



-1

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

Microsoft.AspNet.WebApi.WebHost
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.