System.Net.Http 与 Microsoft.Net.Http

问题描述 投票:0回答:4

我正在使用 ASP.NET Core。我想使用

HttpClient
但我注意到提供了两个 NuGet 包。我该用哪一个?

c# asp.net-core nuget asp.net-core-mvc httpclient
4个回答
71
投票

取决于版本。旧的

System.Net.Http
软件包(2.0 软件包)是遗留软件包,根据描述,已弃用,取而代之的是
Microsoft.Http.Net

旧包 System.Net.Http 现在包含在 “Microsoft.Net.Http”包。

它们的存在是为了提供以前.NET版本和可移植类库中的

HttpClient
。在这种情况下,您应该使用
Microsoft.Net.Http

由于您使用的是 .NET Core,因此应该使用最新的

System.Net.Http
包(例如 4.3.3)。

已更新 csproj

从 .NET Standard 2.0 开始,

System.Net.HttpClient
包已包含在内,并且在您定位
netstandard2.0
时可用。如果出于某种原因,您仍然想在完整的 .NET 和 .NET Core 中引用它,您可以将其添加到您的 csproj 文件中:

<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <!-- // HttpClient for full .NET -->
    <Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <!-- // HttpClient for .NET Core -->
    <PackageReference Include="System.Net.Http" Version="4.3.3" />
</ItemGroup>

如果您使用的是project.json

如果您的project.json同时面向完整的.NET和.NET Core,则必须将

System.Net.Http
程序集添加到
frameworkAssemblies
元素。例如:

"frameworks": {
  "net451": {
    "frameworkAssemblies": {
      "System.Net.Http": "4.0.0.0" // HttpClient for full .NET
    }
  },
  "netstandard1.3": {
    "dependencies": {
      "System.Net.Http": "4.1.0", // HttpClient for .NET Core
    }
  }
}

28
投票

对于任何对此背景感兴趣的人,Immo Landwerth(Microsoft .NET 项目经理)推文对此:

HttpClient 最初是一个 NuGet 包(带外),并在 4.5 中添加到 .NET Framework(内置)。

对于 .NET Core/.NET Standard,我们最初尝试将 .NET 平台建模为一组包,其中内置与带外不再重要。然而,这比我们预期的更加混乱和复杂。

因此,我们很大程度上放弃了使用 Core/Standard 2.0 将 .NET 平台建模为 NuGet 图的想法。

一般答案是:

使用 .NET Core 2.0 和 .NET Standard 2.0,您根本不需要引用 SystemNetHttpClient NuGet 包。不过,它可能会从 1.x 依赖项中获取。

.NET Framework 也是如此:如果您的目标是 4.5 及更高版本,则应该 通常使用内置版本而不是 NuGet 包。再次, 您可能最终会将其引入 .NET Standard 1.x 和 PCL 依赖项,但直接针对 .NET Framework 编写的代码 不应该使用它。

那么为什么这个包仍然存在/为什么我们仍然更新它?简单地 因为我们想让现有的依赖于 它。然而,正如您发现的那样,.NET 上的航行并不顺利 框架。

遗留包的预期模型是:如果您使用 .NET Framework 4.5+、.NET Core 2+、.NET Standard 2+ 中的包 包仅转发到提供实现的平台 反对带来自己的版本。

但这并不是所有情况下实际发生的情况:HTTP 客户端 包将(部分)替换 .NET Framework 上的内置组件 这恰好对某些客户有效,但对另一些客户则失败。因此,我们 现在无法轻易解决这个问题。

除此之外,我们还有常见的 .NET 绑定问题 框架,因此只有在添加绑定重定向时才真正有效。 耶!

因此,作为图书馆作者,我的建议是避免采取 依赖于此包并更喜欢 .NET 中的内置版本 Framework 4.5、.NET Core 2.0 和 .NET Standard 2.0。

https://twitter.com/terrajobst/status/997262020108926976


9
投票

Microsoft.Net.Http
需要额外的
Microsoft.Bcl
依赖项。

为此,如果您仅针对 .NET Framework 或 .NET Core,那么

System.Net.Http
是不错的选择。否则,
Microsoft.Net.Http
将是更好的选择,因为它可能是下一代。


3
投票

2023 年 3 月 - 我相信这个问题的答案已经改变,因此请仔细阅读 NuGet 信息,并根据特定应用程序的依赖关系应用您需要的信息。

另外,不要仅仅根据最近发布的内容来做出选择!

系统.Net.Http enter image description here enter image description here

Microsoft.Net.Http enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.