【问题标题】:HttpClient in ASP.NET 5.0 not found?找不到 ASP.NET 5.0 中的 HttpClient?
【发布时间】:2015-01-14 15:41:08
【问题描述】:

使用 VS2015 和 asp.net 5,当我尝试使用 System.Net.HttpClient 的实例编译我的网站时,它告诉我:

找不到类型或命名空间名称“HttpClient”(您是 缺少 using 指令或程序集引用?)

将鼠标悬停在有问题的代码上,我看到了:

"WebApplication1.ASP.NET 5.0 - Available"
"WebApplication1.ASP.NET Core 5.0 - Not Available"

我的 project.json 文件中列出了 2 个框架:

"frameworks": {
    "aspnet50": { },
    "aspnetcore50": { }
},

我假设其中一个是由于没有组装而导致的,但我真的不知道如何修复它或它是如何工作的。

如何让网站使用 HttpClient 运行而不是引发错误?下面贴出的冒犯方法:

private async Task<string> GetStringFromUri()
{
    using (var httpClient = new HttpClient())
    {
        result = await httpClient.GetStringAsync(
        new Uri("http://baconipsum.com/api/?type=meat-and-filler"));

        viewModel= result;
        return viewModel;
    }
}

【问题讨论】:

    标签: c# asp.net .net asp.net-core dnx


    【解决方案1】:

    终于搞定了。 @yuval 用他关于添加依赖项的回答让我走上了正确的道路,并指出该类存在于 github 上。进一步搜索使我发现该类似乎还没有包含在预览版本中,我不得不将此 nuget repo 添加到我的项目中: https://www.myget.org/gallery/aspnetvnext

    在那个 repo 中是 asp.net vnext nuget 包的夜间构建,其中包含我想要的类。将以下行添加到我的主要依赖项部分和两个框架依赖项部分中,这对我有用: "Microsoft.Net.Http.Client": "1.0.0.0-rc1-10049"

    "dependencies": {
        [...],
        "Microsoft.Net.Http.Client": "1.0.0.0-rc1-10049"
    },
    "frameworks": {
        "aspnet50": {
            "dependencies": {
                "Microsoft.Net.Http.Client": "1.0.0-rc1-10049"
            }
        },
        "aspnetcore50": {
            "dependencies": {
                "Microsoft.Net.Http.Client": "1.0.0-rc1-10049"
            }
        }
    } 
    

    【讨论】:

    • 确保在列表中首先添加myget.org/gallery/aspnetvnext nuget 包源,否则它将不起作用。我想出来的唯一方法是取消选中所有其他包源。我使用 Manage Nuget Packages gui 来安装它,它只将依赖项添加到顶级“依赖项”而不是框架依赖项。我正在使用 Visual Studio 2015 CTP6。
    • HttpClient 也在 System.Net.Http 中。奇怪的是,当我删除 Microsoft.Net.Http.Client 并尝试添加 System.Net.Http(来自 aspnetvnext 的 4.0.0-beta)时,我可以在解决方案资源管理器的依赖关系树中看到它,但缺少 HttpClient。安装依赖于 System.Net.Http 4.0.0-beta 的 Microsoft.Net.Http.Client 仍然有效。
    • 最新版本现在是 1.0.0-beta3-10053
    • 如何配置它以使用 Azure?部署站点时,Azure 不知道要查看新的包源并失败并显示“无法找到 Microsoft.Net.Http.Client >= 1.0.0-beta8-15501”。我似乎找不到任何描述如何为 Azure 执行此操作的地方:github.com/aspnet/Home/wiki/…
    • 这是一个过时的答案
    【解决方案2】:

    我今天遇到了同样的问题,2016 年的解决方案变得更简单了。

    不再需要添加新的 Nuget 存储库。

    当添加System.Net.Http(当前版本4.0.1-beta-23516)时,如果您同时针对clr以及核心框架版本,您仍然会遇到相同的错误,因此需要将依赖项复制到dnxcore框架依赖列表,让你的代码编译。

    之前:

    "frameworks": {
        "dnx451": { 
          "dependencies": {
            "System.Net.Http": "4.0.1-beta-23516"
          }
         },
        "dnxcore50": { }
      }
    

    之后:

    "frameworks": {
        "dnx451": {
          "dependencies": {
            "System.Net.Http": "4.0.1-beta-23516"
          }
        },
        "dnxcore50": {
          "dependencies": {
            "System.Net.Http": "4.0.1-beta-23516"
          }
        }
      }
    

    【讨论】:

      【解决方案3】:

      您需要向您的 nuget 包管理器 (https://www.myget.org/F/aspnetvnext) 添加一个新源,然后将依赖项添加到您的 project.json 文件中。对于dnx451dnxcore50

      {
         "frameworks": {
             "dnx451": {
               "frameworkAssemblies": {
                   "Microsoft.Net.Http.Client": "1.0.0-beta3-10053"
                    }
               },
               "dnxcore50": {
                  "frameworkAssemblies": {
                     "Microsoft.Net.Http.Client": "1.0.0-beta3-10053"
                     }
                }
       }
      

      它是作为 ASP.Net xNext 包的一部分实现的,正如他们在 github 上所说的那样:

      基于套接字的完全托管的 HttpMessageHandler 实现。

      这个项目是 ASP.NET vNext 的一部分。你可以找到样品, ASP.NET vNext 的文档和入门说明,位于 主页回购。

      可以找到完整的演练here

      【讨论】:

      • 感谢您的帮助。今晚晚些时候我会试试的。你介意解释一下我如何为 c#6 找到这样的依赖项,因为它似乎还没有在 Microsoft 的网站上发布文档?
      • @damccull 我建议看看ASP.NET vNext dev branch
      • 非常感谢。一旦我有机会尝试此代码,我会将其标记为答案。
      • 原来我在输入这样的依赖项后也收到了同样的信息。就像 HttpClient 不再存在,或者还没有为新系统编写。还有其他建议吗?我的最终目标是从 url 下载一些 json。
      • 这是一个过时的答案
      【解决方案4】:

      我今天在 RC1 中找不到:

      对于从那里找到此问题的任何人,HttpClient 现在位于 System.Net.Http 命名空间中。

      【讨论】:

        【解决方案5】:

        只需将此添加到您的project.json

        "dependencies": {
            ...
            "Microsoft.Net.Http": "2.2.7-beta"
        },
        

        或任何最新版本。

        【讨论】:

        • 您的目标是哪个框架?我添加了引用但没有找到。
        • @user3285954 在我们使用 DNX beta 8 时,我没有看到我们明确引用 Microsoft.Net.Http 库。但回到 beta 4,我们使用了"Microsoft.Net.Http": "2.2.7-beta"
        【解决方案6】:

        对我来说,此线程中缺少一个链接....您需要添加https://www.myget.org/gallery/aspnetvnext NuGet 源,但实际的 NuGet 源 URL 是“https://www.myget.org/F/aspnetvnext/”。一旦你把它作为你的金块来源,它的其余部分就会变得生动起来。

        此外,在撰写本文时(2015 年 6 月 17 日),版本为“Microsoft.Net.Http.Client”:“1.0.0-beta3-10053”。

        您还需要使用 Matt DeKreys 于 6 月 7 日编辑的更新的“框架”部分(dnx451 和 dnxcore50)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 2016-06-29
          • 2021-12-04
          • 1970-01-01
          • 1970-01-01
          • 2017-03-05
          相关资源
          最近更新 更多