System.Net.Http: manca dallo spazio dei nomi? (utilizzando .net 4.5)


103

TL; DR: Sono nuovo in questa lingua e non ho idea di cosa sto facendo

ecco la mia classe finora:

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

quando eseguo csc filename.cs, ottengo il seguente errore:

Il tipo o il nome dello spazio dei nomi "Http" non esiste nello spazio dei nomi "System.Net" (manca un riferimento all'assembly?)


Stai tentando di accedere a un campo non statico da un metodo statico (il webClientcampo). Inoltre, non lo usi mai per niente. Probabilmente potresti semplicemente rimuoverlo.
Cᴏʀʏ

Risposte:


107

HttpClientvive nello System.Net.Httpspazio dei nomi.

Dovrai aggiungere:

using System.Net.Http;

E assicurati di fare riferimento System.Net.Http.dllin .NET 4.5.


Il codice pubblicato non sembra fare nulla con webClient. C'è qualcosa di sbagliato nel codice che sta effettivamente compilando usando HttpWebRequest?


Aggiornare

Per aprire l'Aggiungi riferimento finestra di dialogo fare clic destro sul progetto in Esplora soluzioni e scegliere Aggiungi riferimento ... . Dovrebbe assomigliare a:

inserisci qui la descrizione dell'immagine


9
Ho appena installato .NET 4.5 e dice che il nome dello spazio dei nomi "Http" non esiste nello spazio dei nomi "System.Net"
NullVoxPopuli

1
Sei sicuro che il tuo progetto abbia come target .NET 4.5 e di cui hai aggiunto il riferimento System.Net.Http.dll?
M.Babcock

3
Um ... no non lo farà. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e fare clic Add Referencesquando viene visualizzata la finestra di dialogo, selezionare la scheda più a sinistra (non utilizzo la finestra di dialogo dei riferimenti incorporati ma la mia si chiama Assiemi ). Scorri l'elenco fino a visualizzare un elemento chiamato System.Net.Httpfai doppio clic e ricostruiscilo.
M.Babcock

1
Certamente. Ecco della documentazione da MSDN per farlo. Fammi sapere se incontri qualche problema.
M.Babcock

1
Stai lavorando a una soluzione con più progetti? Sei sicuro che l'assembly System.Net.Http sia installato nel progetto che contiene il file che stai guardando? Puoi regolare i progetti che caricano i pacchetti nuget in Package Manager
Haymaker87

82

Pacchetto NuGet> Microsoft.AspNet.WebApi.Client


4
Questo ha praticamente risolto il problema per me. Ho installato questo pacchetto: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
La risposta accettata (l'aggiunta di un riferimento) non mi ha aiutato, ma lo ha fatto. Grazie.
adinas

1
Questo è l'approccio corretto da adottare. L'aggiunta di un riferimento a una dll potrebbe porre problemi su un server di compilazione. Avere il pacchetto nuget corretto risolverà il problema.
Darth Coder

15

Come l'ho risolto.

  1. Apri il progetto (!) "Proprietà", scegli "Applicazione", seleziona il framework di destinazione ".Net Framework 4.5"
  2. Fare clic con il tasto destro sul progetto -> Aggiungi riferimento
  3. Assicurati che in "Assiemi" -> "Estensioni" l'opzione "System.Net.Http" sia deselezionata
  4. Vai su "Assemblies" -> "Framework" e seleziona le opzioni "System.Net.Http" e "System.Net.Http"
  5. È tutto!

Nel mio caso avevo all'inizio .Net 4.0 e "Assemblies" -> "Estensioni" opzione "System.Net.Http" con la versione 2.0.0.0. Dopo le mie azioni "Assemblies" -> "Framework", le opzioni "System.Net.Http" e "System.Net.Http" avevano la stessa versione 4.0.0.0.


questo era il problema anche per me, non mostrava il riferimento "System.Net.Http" fino a quando non ho aggiornato da .NET 3.5 a .NET 4.5
FelixJongleur42

10

Console di Gestione pacchetti di Visual Studio> Pacchetto di installazione Microsoft.AspNet.WebApi.Client


5

Supponendo che utilizzi Visual Studio 10, puoi scaricare un'installazione che include System.Net.Http, per Visual Studio 10 qui: scarica MVC4 per VS10

Dopo averlo installato, fare clic con il pulsante destro del mouse sulla cartella Riferimenti nel progetto VS e quindi selezionare Aggiungi riferimento . Quindi, seleziona la scheda Sfoglia . Passare al percorso di installazione degli assembly per l'installazione di MVC4 (in genere in Programmi (x86) / Microsoft ASP.NET/ASP.NET MVC4 / assembly) e selezionare l'assembly denominato "System.Net.Http.dll". Ora puoi aggiungere il tuo "using System.Net.Http" all'inizio del codice e iniziare a creare connessioni HttpClient.



3

Devi avere un riferimento System.Web.Httpall'assembly che ha la HTTPClientclasse, che stai cercando di usare. Prova ad aggiungere la riga sottostante prima della dichiarazione di classe

using System.Web.Http;

Se ricevi ancora l'errore, prova a farlo in Visual Studio

  1. Fare clic con il tasto destro sulla cartella Riferimenti del progetto.
  2. Seleziona Aggiungi riferimento.
  3. Selezionare la scheda .NET (o selezionare il pulsante Sfoglia se non è un assembly .NET Framework).
  4. Fare doppio clic sull'assembly contenente lo spazio dei nomi nel messaggio di errore ( System.Web.Http.dll).
  5. Premere il pulsante OK.

@TheLindyHop: puoi provare a seguire i passaggi nella risposta aggiornata?
Akhil

@Akhil - HttpClientappartiene System.Web.Http.dllall'assembly .NET 4.5 (non System.Net).
M.Babcock

@ M.Babcock: grazie per avermelo fatto sapere. Ho aggiornato la risposta :)
Akhil

Come faccio a visualizzare la cartella dei riferimenti? Ho iniziato con solo un file: al di fuori di qualsiasi progetto = \
NullVoxPopuli

ok, fai clic con il pulsante destro del mouse sul tuo progetto e seleziona Properties. Dovresti vedere Referencessul lato sinistro.
Akhil



1

HttpClient è una novità in .net 4.5. Probabilmente dovresti usare HttpWebRequest .


Il codice incluso nella domanda già usa HttpWebRequest, non sono sicuro del motivo per cui non lo stanno usando.
M.Babcock

Concordato. HTTPClient viene dichiarato, ma non viene mai utilizzato. Molto strano.
Kibbee

Sto riscontrando un problema includendo lo spazio dei nomi. using System.Net.Http; yeilds l'errore "Http" non esiste nello spazio dei nomi "System.Net"
NullVoxPopuli

Sei sicuro di utilizzare il compilatore .Net 4.5?
Kibbee

0

Per risolvere il problema :

  1. Vai al tuo esploratore di soluzioni.
  2. Fai clic con il pulsante destro del mouse sul nome del progetto e scegli aggiungi
  3. Seleziona i riferimenti e consenti il ​​file. Net framework 4.5per terminare il caricamento
  4. Scorri verso il basso e seleziona System.Net.Httpe fai clic su OK.

Problema risolto.


0

Rendere vera la proprietà "Copia locale" per il riferimento lo ha fatto per me. Espandere Riferimenti, fare clic con il pulsante destro del mouse su System.Net.Http e modificare il valore della proprietà Copia locale su True nella finestra delle proprietà. Sto usando VS2019.


0

Assicurati che sia referenziato nel tuo web.config:


0

Con Nuget Package Manager installa Microsoft.AspNet.WebApi.Core.

Dopodichè:

using System.Web.Http;

o se usi VB

imports System.Web.Http



-1

In Visual Studio puoi usare nuget per caricare il pacchetto

Microsoft.AspNet.WebApi.WebHost
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.