System.Net.Http: ausente no namespace? (usando .net 4.5)

103

TL; DR: Eu sou novo nessa linguagem e não tenho ideia do que estou fazendo

aqui está minha aula até agora:

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 eu faço csc filename.cs, obtenho o seguinte erro:

O tipo ou nome de namespace 'Http' não existe no namespace 'System.Net' (está faltando uma referência de assembly?)

NullVoxPopuli
fonte
Você está tentando acessar um campo não estático de um método estático (o webClientcampo). Além disso, você nunca o usa para nada. Você provavelmente poderia simplesmente removê-lo.
Cᴏʀʏ

Respostas:

107

HttpClientmora no System.Net.Httpnamespace.

Você precisará adicionar:

using System.Net.Http;

E certifique-se de que está fazendo referência System.Net.Http.dllno .NET 4.5.


O código postado não parece fazer nada com webClient. Há algo de errado com o código que está realmente sendo compilado HttpWebRequest?


Atualizar

Para abrir o Add Reference diálogo botão direito do mouse em seu projeto no Solution Explorer e selecione Add Reference ... . Deve ser parecido com:

insira a descrição da imagem aqui

M.Babcock
fonte
9
Acabei de instalar o .NET 4.5 e ele diz que o nome do namespace 'Http' não existe no namespace 'System.Net'
NullVoxPopuli
1
Tem certeza de que seu projeto está direcionado ao .NET 4.5 e que você adicionou a referência System.Net.Http.dll?
M.Babcock,
3
Hum ... não, não vai. Clique com o botão direito em seu projeto no Solution Explorer e clique Add Referencesquando a caixa de diálogo aparecer, selecione a guia mais à esquerda (eu não uso a caixa de diálogo de referências internas, mas a minha é chamada de Assemblies ). Role a lista até ver um item chamado System.Net.Httpclique duas vezes nele e reconstrua.
M.Babcock
1
Certamente. Aqui estão algumas documentações do MSDN para fazer isso. Deixe-me saber se você tiver algum problema.
M.Babcock
1
Você está trabalhando em uma solução com vários projetos? Tem certeza de que o assembly System.Net.Http está instalado no projeto que contém o arquivo que você está olhando? Você pode ajustar quais projetos carregam quais pacotes nuget no Gerenciador de Pacotes
Haymaker87
82

Pacote NuGet> Microsoft.AspNet.WebApi.Client

user1662812
fonte
4
Isso praticamente resolveu o problema para mim. Instalei este pacote: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst
3
A resposta aceita (adicionar uma referência) não me ajudou, mas ajudou. Obrigado.
adinas
1
Esta é a abordagem correta a seguir. Adicionar uma referência a uma dll pode representar problemas em um servidor de compilação. Ter o pacote nuget correto resolverá o problema.
Darth Coder
15

Como eu resolvi isso.

  1. Abra o projeto (!) "Propriedades", escolha "Aplicativo", selecione a estrutura de segmentação ".Net Framework 4.5"
  2. Clique com o botão direito no seu projeto -> Adicionar referência
  3. Certifique-se de que em "Assemblies" -> "Extensions" a opção "System.Net.Http" está desmarcada
  4. Vá para "Assemblies" -> "Framework" e selecione as opções "System.Net.Http" e "System.Net.Http"
  5. Isso é tudo!

No meu caso eu tinha no início .Net 4.0 e "Assemblies" -> "Extensions" a opção "System.Net.Http" com a versão 2.0.0.0. Após minhas ações "Assemblies" -> "Framework", as opções "System.Net.Http" e "System.Net.Http" tinham a mesma versão 4.0.0.0.

LagiNatoRRR
fonte
esse era o problema para mim também, não estava mostrando a referência "System.Net.Http" até que eu atualizei do .NET 3.5 para o .NET 4.5
FelixJongleur42
10

Visual Studio Package Manager Console> Install-Package Microsoft.AspNet.WebApi.Client

lance-p
fonte
5

Supondo que você esteja usando o Visual Studio 10, você pode baixar uma instalação que inclui System.Net.Http, para Visual Studio 10 aqui: baixe MVC4 para VS10

Depois de instalado, clique com o botão direito na pasta References no VS Project e selecione Add Reference . Em seguida, selecione a guia Procurar . Navegue até o caminho de instalação dos assemblies para a instalação do MVC4 (geralmente em Arquivos de programas (x86) / Microsoft ASP.NET/ASP.NET MVC4 / assemblies) e selecione o assembly denominado 'System.Net.Http.dll'. Agora você pode adicionar seu 'using System.Net.Http' na parte superior do seu código e começar a criar conexões HttpClient.

Ussabin
fonte
5

basta ir para adicionar referência e adicionar

system.net.http

insira a descrição da imagem aqui

Hussein Alrubaye
fonte
3

Você precisa ter uma referência para a System.Web.Httpmontagem que tem a HTTPClientclasse, você está tentando usar. Tente adicionar a linha abaixo antes de sua declaração de classe

using System.Web.Http;

Se você ainda receber o erro, tente fazer isso em Visual Studio

  1. Clique com o botão direito na pasta References em seu projeto.
  2. Selecione Adicionar Referência.
  3. Selecione a guia .NET (ou selecione o botão Procurar se não for um assembly .NET Framework).
  4. Clique duas vezes no assembly que contém o namespace na mensagem de erro ( System.Web.Http.dll).
  5. Pressione o botão OK.
Akhil
fonte
@TheLindyHop: você pode tentar seguir as etapas na resposta atualizada?
Akhil
@Akhil - HttpClientpertence ao System.Web.Http.dllconjunto .NET 4.5 (não System.Net).
M.Babcock,
@ M.Babcock: obrigado por me avisar. Eu atualizei a resposta :)
Akhil
Como faço para que a pasta de referências apareça? Comecei com apenas um arquivo: fora de qualquer projeto = \
NullVoxPopuli
ok, clique com o botão direito no seu projeto e selecione Properties. Você deve ver Referencesno lado esquerdo.
Akhil
2

Você precisará de um using System.Net.Httpno topo.

Keith Nicholas
fonte
1

HttpClient é novo no .net 4.5. Você provavelmente deve estar usando HttpWebRequest .

Kibee
fonte
O código incluído na pergunta já usa HttpWebRequest, mas não sei por que eles não estão usando.
M.Babcock,
Acordado. O HTTPClient está sendo declarado, mas nunca está sendo usado. Muito estranho.
Kibbee
Estou tendo um problema, incluindo o namespace para ele. usando System.Net.Http; yeilds o erro 'Http' não existe no namespace 'System.Net'
NullVoxPopuli
Tem certeza de que está usando o compilador .Net 4.5?
Kibbee
0

Para resolver o problema:

  1. Vá para o seu explorador de soluções.
  2. Clique com o botão direito no nome do projeto e escolha adicionar
  3. Selecione referências e permita o. Net framework 4.5para terminar de carregar
  4. Role para baixo, selecione System.Net.Httpe clique em ok.

Problema resolvido.

boakye_wozniac
fonte
0

Tornar a propriedade "Copiar local" True para a referência fez isso por mim. Expanda References, clique com o botão direito em System.Net.Http e altere o valor da propriedade Copy Local para True na janela de propriedades. Estou usando o VS2019.

Goodmedalist
fonte
0

Certifique-se de que está referenciado no seu web.config:

Nomad77
fonte
0

Com o Nuget Package Manager, instale Microsoft.AspNet.WebApi.Core.

Depois disto:

using System.Web.Http;

ou se você usa VB

imports System.Web.Http

enfurecido
fonte
-1

No Visual Studio, você pode usar o nuget para carregar o pacote

Microsoft.AspNet.WebApi.WebHost
Cetin Sahin
fonte