System.Net.Http: ¿falta en el espacio de nombres? (usando .net 4.5)

103

TL; DR: Soy nuevo en este idioma y no tengo idea de lo que estoy haciendo.

aquí está mi clase hasta ahora:

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

cuando hago csc filename.cs, aparece el siguiente error:

El tipo o nombre del espacio de nombres 'Http' no existe en el espacio de nombres 'System.Net' (¿le falta una referencia de ensamblado?)

NullVoxPopuli
fuente
Está intentando acceder a un campo no estático desde un método estático (el webClientcampo). Además, nunca lo usas para nada. Probablemente podrías simplemente eliminarlo.
Cᴏʀʏ

Respuestas:

107

HttpClientvive en el System.Net.Httpespacio de nombres.

Deberá agregar:

using System.Net.Http;

Y asegúrese de hacer referencia System.Net.Http.dllen .NET 4.5.


El código publicado no parece hacer nada con webClient. ¿Hay algún problema con el código que realmente se está compilando HttpWebRequest?


Actualizar

Para abrir el Agregar referencia de diálogo haga clic derecho en su proyecto en el Explorador de soluciones y seleccione Agregar referencia ... . Debería verse algo como:

ingrese la descripción de la imagen aquí

M.Babcock
fuente
9
Acabo de instalar .NET 4.5 y dice que el nombre del espacio de nombres 'Http' no existe en el espacio de nombres 'System.Net'
NullVoxPopuli
1
¿Está seguro de que su proyecto está dirigido a .NET 4.5 y que ha agregado la referencia System.Net.Http.dll?
M.Babcock
3
Um ... no, no lo hará. Haga clic con el botón derecho en su proyecto en el Explorador de soluciones y haga clic Add Referencescuando aparezca el cuadro de diálogo, seleccione la pestaña más a la izquierda (no uso el cuadro de diálogo de referencias incorporado, pero el mío se llama Ensamblados ). Desplácese por la lista hasta que vea un elemento llamado System.Net.Httphaga doble clic en él y reconstruya.
M.Babcock
1
Ciertamente. Aquí hay algo de documentación de MSDN para hacerlo. Avísame si tienes algún problema.
M.Babcock
1
¿Estás trabajando en una solución con múltiples proyectos? ¿Está seguro de que el ensamblado System.Net.Http está instalado en el proyecto que contiene el archivo que está viendo? Puede ajustar qué proyectos cargan qué paquetes nuget en el Administrador de paquetes
Haymaker87
82

Paquete NuGet> Microsoft.AspNet.WebApi.Client

user1662812
fuente
4
Esto prácticamente resolvió el problema para mí. Instalé este paquete: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst
3
La respuesta aceptada (agregar una referencia) no me ayudó, pero esto sí. Gracias.
adinas
1
Este es el enfoque correcto a seguir. Agregar una referencia a un dll podría plantear problemas en un servidor de compilación. Tener el paquete nuget correcto resolverá el problema.
Darth Coder
15

Cómo lo resolví.

  1. Abra el proyecto (!) "Propiedades", elija "Aplicación", seleccione el marco de destino ".Net Framework 4.5"
  2. Haga clic derecho en su proyecto -> Agregar referencia
  3. Asegúrese de que en "Ensamblados" -> "Extensiones" la opción "System.Net.Http" no esté marcada
  4. Vaya a "Ensamblados" -> "Marco" y seleccione las opciones "System.Net.Http" y "System.Net.Http"
  5. ¡Eso es todo!

En mi caso tenía al principio .Net 4.0 y "Ensamblados" -> opción "Extensiones" "System.Net.Http" con la versión 2.0.0.0. Después de mis acciones "Assemblies" -> "Framework", las opciones "System.Net.Http" y "System.Net.Http" tenían la misma versión 4.0.0.0.

LagiNatoRRR
fuente
ese era el problema para mí también, no mostraba la referencia "System.Net.Http" hasta que actualicé de .NET 3.5 a .NET 4.5
FelixJongleur42
10

Consola del Administrador de paquetes de Visual Studio> Paquete de instalación Microsoft.AspNet.WebApi.Client

lanza-p
fuente
5

Suponiendo que usa Visual Studio 10, puede descargar una instalación que incluye System.Net.Http, para Visual Studio 10 aquí: descargue MVC4 para VS10

Una vez que lo haya instalado, haga clic con el botón derecho en la carpeta Referencias en el Proyecto VS y luego seleccione Agregar referencia . Luego, seleccione la pestaña Examinar . Navegue a la ruta de instalación de los ensamblados para la instalación de MVC4 (generalmente en Archivos de programa (x86) / Microsoft ASP.NET/ASP.NET MVC4 / ensambles) y seleccione el ensamblado llamado 'System.Net.Http.dll'. Ahora puede agregar su 'usando System.Net.Http' en la parte superior de su código y comenzar a crear conexiones HttpClient.

Ussabin
fuente
5

solo ve para agregar referencia y luego agrega

system.net.http

ingrese la descripción de la imagen aquí

Hussein Alrubaye
fuente
3

Debe tener una referencia al System.Web.Httpensamblado que tiene la HTTPClientclase que está intentando usar. Intente agregar la siguiente línea antes de su declaración de clase

using System.Web.Http;

Si aún recibe el error, intente hacer esto en Visual Studio

  1. Haga clic derecho en la carpeta Referencias de su proyecto.
  2. Seleccione Agregar referencia.
  3. Seleccione la pestaña .NET (o seleccione el botón Examinar si no es un ensamblado de .NET Framework).
  4. Haga doble clic en el ensamblado que contiene el espacio de nombres en el mensaje de error ( System.Web.Http.dll).
  5. Presione el botón OK.
Akhil
fuente
@TheLindyHop: ¿puedes intentar seguir los pasos de la respuesta actualizada?
Akhil
@Akhil: HttpClientpertenece al System.Web.Http.dllensamblado .NET 4.5 (no System.Net).
M.Babcock
@ M.Babcock: gracias por hacérmelo saber. He actualizado la respuesta :)
Akhil
¿Cómo hago para que aparezca la carpeta de referencias? Comencé con solo un archivo: fuera de cualquier proyecto = \
NullVoxPopuli
ok, haz clic derecho en tu proyecto y selecciona Properties. Debería ver Referencesen el lado izquierdo.
Akhil
2

Necesitarás un using System.Net.Httpen la parte superior.

Keith Nicholas
fuente
1

HttpClient es nuevo en .net 4.5. Probablemente debería usar HttpWebRequest .

Kibbee
fuente
El código incluido en la pregunta ya se usa HttpWebRequest, aunque no estoy seguro de por qué no lo están usando.
M.Babcock
Convenido. El HTTPClient se declara, pero nunca se utiliza. Muy raro.
Kibbee
Tengo un problema con el espacio de nombres. usando System.Net.Http; Yeilds el error 'Http' no existe en el espacio de nombres 'System.Net'
NullVoxPopuli
¿Está seguro de que está utilizando el compilador .Net 4.5?
Kibbee
0

Para resolver el problema :

  1. Vaya a su explorador de soluciones.
  2. Haga clic derecho en el nombre del proyecto y elija agregar
  3. Seleccione referencias y permita el. Net framework 4.5para terminar de cargar
  4. Desplácese hacia abajo y seleccione System.Net.Httpy haga clic en Aceptar.

Problema resuelto.

boakye_wozniac
fuente
0

Hacer que la propiedad "Copiar local" sea verdadera para la referencia lo hizo por mí. Expanda Referencias, haga clic con el botón derecho en System.Net.Http y cambie el valor de la propiedad Copiar local a Verdadero en la ventana de propiedades. Estoy usando VS2019.

Buenmedalista
fuente
0

Asegúrese de que esté referenciado en su web.config:

Nomad77
fuente
0

Con Nuget Package Manager, instale Microsoft.AspNet.WebApi.Core.

Después de este:

using System.Web.Http;

o si usa VB

imports System.Web.Http

enfurecido
fuente
-1

En Visual Studio puede usar nuget para cargar el paquete

Microsoft.AspNet.WebApi.WebHost
Cetin Sahin
fuente