System.Net.Http:在命名空间中找不到?(使用.NET 4.5)

129

简而言之:我刚学这门语言,不知道自己在做什么。

以下是我的类:

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

当我执行 csc filename.cs 命令时,出现以下错误:

类型或命名空间名称“Http”在命名空间“System.Net”中不存在(是否缺少程序集引用?)


你正在尝试从静态方法(webClient字段)访问非静态字段。而且,你实际上从未对它进行任何使用。你可能只需将其删除即可。 - Cᴏʀʏ
16个回答

130

HttpClient 位于 System.Net.Http 命名空间中。

你需要添加:

using System.Net.Http;

请确保在 .NET 4.5 中引用了 System.Net.Http.dll


贴出的代码似乎没有对 webClient 进行任何操作。对于实际使用 HttpWebRequest 的代码是否有问题?


更新:

右键单击Solution Explorer中的项目,选择添加引用...以打开添加引用对话框。它应该长这样:

enter image description here


15
我刚安装了.NET 4.5,但它提示在命名空间'System.Net'中不存在'Http'命名空间。请问如何解决?请注意,不要改变原意。 - NullVoxPopuli
3
你确定你的项目是针对.NET 4.5版本,并且已经添加了对System.Net.Http.dll的引用吗? - M.Babcock
6
不会的。在“解决方案资源管理器”中右键单击您的项目,选择“添加引用”。弹出对话框后,选择最左侧的选项卡(我不使用内置的引用对话框,但我的叫做“程序集”)。滚动列表直到找到一个名为“System.Net.Http”的项目,双击它并重新构建。 - M.Babcock
2
当然。这里是来自MSDN的一些文档,用于完成此操作。如果您遇到任何问题,请告诉我。 - M.Babcock
2
你正在处理一个包含多个项目的解决方案吗?你确定包含你所查看的文件的项目中已经安装了 System.Net.Http 程序集吗?你可以在“程序包管理器”中调整哪些项目加载哪些 NuGet 包。 - Haymaker87
显示剩余4条评论

107
NuGet > Microsoft.AspNet.WebApi.Client 包

5
我安装了这个包:https://www.nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2,这基本上解决了我的问题。 - Boinst
4
采纳的答案(添加参考文献)对我没有帮助,但这个答案有用。谢谢。 - adinas
1
这是正确的做法。在构建服务器上添加dll引用可能会导致问题。拥有正确的nuget包将解决此问题。 - Darth Coder

18

我是如何解决它的。

  1. 打开项目(!) "属性",选择 "应用程序",选择目标框架 ".Net Framework 4.5"
  2. 右键单击您的项目 -> 添加引用
  3. 确保在 "程序集" -> "扩展" 选项中未选中 "System.Net.Http"
  4. 转到 "程序集" -> "框架",选择 "System.Net.Http" 和 "System.Net.Http" 选项
  5. 这就是全部内容了!

在我的情况下,我最初使用的是 .Net 4.0,并且 "程序集" -> "扩展" 选项中版本为2.0.0.0的 "System.Net.Http"。经过我的操作后,"程序集" -> "框架" 选项中的 "System.Net.Http" 和 "System.Net.Http" 版本均为 4.0.0.0。


这也是我的问题,直到我从.NET 3.5升级到.NET 4.5后才显示引用“System.Net.Http”。 - FelixJongleur42

11

Visual Studio 包管理器控制台 > 安装软件包 Microsoft.AspNet.WebApi.Client


6
假设您正在使用Visual Studio 10,您可以在此处下载适用于VS10的MVC4,其中包括System.Net.Http。安装完成后,在VS项目中右键单击“引用”文件夹,然后选择“添加引用”。接着,选择“浏览”选项卡。导航到MVC4安装的程序集安装路径(通常位于Program Files(x86)/ Microsoft ASP.NET / ASP.NET MVC4 / assemblies),并选择名为'System.Net.Http.dll'的程序集。现在,您可以在代码顶部添加'using System.Net.Http',然后开始创建HttpClient连接。

6

只需转到添加引用,然后添加。

system.net.http

enter image description here


4

3

您需要引用包含 HTTPClient 类的 System.Web.Http 程序集,才能使用它。尝试在类声明前添加以下行:

using System.Web.Http;

如果您仍然遇到错误,请尝试在Visual Studio中执行以下操作:
  1. 右键单击项目的引用文件夹。
  2. 选择添加引用。
  3. 选择.NET选项卡(如果不是.NET Framework程序集,则选择浏览按钮)。
  4. 双击包含错误信息中命名空间的程序集(System.Web.Http.dll)。
  5. 按下“确定”按钮。

@TheLindyHop:你能试着按照更新的答案步骤操作一下吗? - Akhil
@Akhil - HttpClient 属于 .NET 4.5 中的 System.Web.Http.dll 程序集(而不是 System.Net)。 - M.Babcock
我该如何让引用文件夹显示出来?我只是从一个文件开始:不属于任何项目 =\ - NullVoxPopuli
好的,右键单击您的项目,然后选择“属性”。您应该在左侧看到“引用”。 - Akhil
@TheLindyHop - 请按照我的评论中的指示操作。它类似但稍微更详细。 - M.Babcock

3
你需要在顶部添加using System.Net.Http

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接