System.Net.Http: absent de l'espace de noms? (en utilisant .net 4.5)


103

TL; DR: Je suis nouveau dans cette langue et je n'ai aucune idée de ce que je fais

voici ma classe pour l'instant:

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

quand je fais csc filename.cs, j'obtiens l'erreur suivante:

Le nom de type ou d'espace de noms 'Http' n'existe pas dans l'espace de noms 'System.Net' (vous manquez une référence d'assembly?)


Vous essayez d'accéder à un champ non statique à partir d'une méthode statique (le webClientchamp). De plus, vous ne l'utilisez jamais pour quoi que ce soit. Vous pouvez probablement simplement le supprimer.
Cᴏʀʏ

Réponses:


107

HttpClientvit dans l' System.Net.Httpespace de noms.

Vous devrez ajouter:

using System.Net.Http;

Et assurez-vous que vous faites référence System.Net.Http.dlldans .NET 4.5.


Le code affiché ne semble rien faire avec webClient. Y a-t-il quelque chose qui ne va pas avec le code qui compile réellement HttpWebRequest?


Mettre à jour

Pour ouvrir la Ajouter Référence clic droit sur votre projet de dialogue dans l' Explorateur de solutions et sélectionnez Ajouter une référence ... . Cela devrait ressembler à quelque chose comme:

entrez la description de l'image ici


9
Je viens d'installer .NET 4.5, et il est indiqué que le nom de l'espace de noms 'Http' n'existe pas dans l'espace de noms 'System.Net'
NullVoxPopuli

1
Êtes-vous sûr que votre projet cible .NET 4.5 et auquel vous avez ajouté la référence System.Net.Http.dll?
M.Babcock

3
Euh ... non, ce ne sera pas le cas. Cliquez avec le bouton droit sur votre projet dans l' Explorateur de solutions et cliquez Add Referenceslorsque la boîte de dialogue apparaît, sélectionnez l'onglet le plus à gauche (je n'utilise pas la boîte de dialogue des références intégrées mais la mienne s'appelle Assemblies ). Faites défiler la liste jusqu'à ce que vous voyiez un élément appelé System.Net.Httpdouble-cliquez dessus et reconstruisez.
M.Babcock

1
Certainement. Voici une documentation de MSDN pour le faire. Faites-moi savoir si vous rencontrez des problèmes.
M.Babcock

1
Travaillez-vous dans une solution avec plusieurs projets? Êtes-vous sûr que l'assembly System.Net.Http est installé dans le projet qui contient le fichier que vous regardez? Vous pouvez ajuster quels projets chargent quels packages nuget dans le gestionnaire de packages
Haymaker87

82

NuGet> Package Microsoft.AspNet.WebApi.Client


4
Cela a pratiquement résolu le problème pour moi. J'ai installé ce package: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
La réponse acceptée (ajouter une référence) ne m'a pas aidé, mais cela l'a fait. Merci.
adinas

1
C'est la bonne approche à adopter. L'ajout d'une référence à une dll peut poser des problèmes sur un serveur de build. Avoir le bon package nuget résoudra le problème.
Darth Coder

15

Comment je l'ai résolu.

  1. Ouvrez le projet (!) "Propriétés", choisissez "Application", sélectionnez le cadre de ciblage ".Net Framework 4.5"
  2. Faites un clic droit sur votre projet -> Ajouter une référence
  3. Assurez-vous que dans "Assemblies" -> "Extensions" l'option "System.Net.Http" est décochée
  4. Allez dans "Assemblies" -> "Framework" et sélectionnez les options "System.Net.Http" et "System.Net.Http"
  5. C'est tout!

Dans mon cas, j'avais au début .Net 4.0 et "Assemblies" -> "Extensions" option "System.Net.Http" avec la version 2.0.0.0. Après mes actions "Assemblies" -> "Framework" options "System.Net.Http" et "System.Net.Http" avaient la même version 4.0.0.0.


c'était le problème pour moi aussi, il n'affichait pas la référence "System.Net.Http" jusqu'à ce que je passe de .NET 3.5 à .NET 4.5
FelixJongleur42

10

Console du gestionnaire de packages Visual Studio> Package d'installation Microsoft.AspNet.WebApi.Client


5

En supposant que vous utilisez Visual Studio 10, vous pouvez télécharger une installation qui inclut System.Net.Http, pour Visual Studio 10 ici: téléchargez MVC4 pour VS10

Une fois que vous l'avez installé, cliquez avec le bouton droit sur le dossier Références dans le projet VS, puis sélectionnez Ajouter une référence . Ensuite, sélectionnez l' onglet Parcourir . Accédez au chemin d'installation des assemblys pour l'installation de MVC4 (généralement dans Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / assemblies) et sélectionnez l'assembly nommé «System.Net.Http.dll». Vous pouvez maintenant ajouter votre 'using System.Net.Http' en haut de votre code et commencer à créer des connexions HttpClient.



3

Vous devez avoir une référence à l' System.Web.Httpassembly qui a la HTTPClientclasse que vous essayez d'utiliser. Essayez d'ajouter la ligne ci-dessous avant votre déclaration de classe

using System.Web.Http;

Si vous obtenez toujours l'erreur, essayez de le faire dans Visual Studio

  1. Cliquez avec le bouton droit sur le dossier Références de votre projet.
  2. Sélectionnez Ajouter une référence.
  3. Sélectionnez l'onglet .NET (ou sélectionnez le bouton Parcourir s'il ne s'agit pas d'un assembly .NET Framework).
  4. Double-cliquez sur l'assembly contenant l'espace de noms dans le message d'erreur ( System.Web.Http.dll).
  5. Appuyez sur le bouton OK.

@TheLindyHop: pouvez-vous essayer de suivre les étapes de la réponse mise à jour?
Akhil

@Akhil - HttpClientappartient à l' System.Web.Http.dllassembly .NET 4.5 (pas System.Net).
M.Babcock

@ M.Babcock: merci de me l'avoir fait savoir. J'ai mis à jour la réponse :)
Akhil

Comment afficher le dossier des références? J'ai commencé avec juste un fichier: en dehors de tout projet = \
NullVoxPopuli

ok, faites un clic droit sur votre projet et sélectionnez Properties. Vous devriez voir Referencessur le côté gauche.
Akhil



1

HttpClient est nouveau dans .net 4.5. Vous devriez probablement utiliser HttpWebRequest .


Le code inclus dans la question l'utilise déjà HttpWebRequest, je ne sais pas pourquoi ils ne l'utilisent pas.
M.Babcock

D'accord. Le HTTPClient est déclaré, mais jamais utilisé. Très étrange.
Kibbee

J'ai un problème avec l'espace de noms pour cela. en utilisant System.Net.Http; yeilds l'erreur 'Http' n'existe pas dans l'espace de noms 'System.Net'
NullVoxPopuli

Êtes-vous sûr d'utiliser le compilateur .Net 4.5?
Kibbee

0

Résoudre le problème :

  1. Accédez à votre explorateur de solutions.
  2. Faites un clic droit sur le nom du projet et choisissez ajouter
  3. Sélectionnez les références et autorisez le. Net framework 4.5pour terminer le chargement
  4. Faites défiler vers le bas, sélectionnez System.Net.Httpet cliquez sur OK.

Problème résolu.


0

Faire de la propriété "Copy Local" True pour la référence l'a fait pour moi. Développez Références, cliquez avec le bouton droit sur System.Net.Http et modifiez la valeur de la propriété Copier local sur True dans la fenêtre des propriétés. J'utilise VS2019.


0

Assurez-vous qu'il est référencé dans votre web.config:


0

Avec le gestionnaire de packages Nuget, installez Microsoft.AspNet.WebApi.Core.

Après ça:

using System.Web.Http;

ou si vous utilisez VB

imports System.Web.Http



-1

Dans Visual Studio, vous pouvez utiliser nuget pour charger le package

Microsoft.AspNet.WebApi.WebHost
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.