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


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


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


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.


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


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.



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.

@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



1

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


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.


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.


0

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


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



-1

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

Microsoft.AspNet.WebApi.WebHost
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.