System.Net.Http与Microsoft.Net.Http

时间:2015-06-25 14:27:50

标签: c# asp.net-core nuget asp.net-core-mvc httpclient

我正在使用ASP.NET Core。我想使用HttpClient,但我注意到提供了两个NuGet包。我使用哪一个?

3 个答案:

答案 0 :(得分:54)

取决于版本。旧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
    }
  }
}

答案 1 :(得分:7)

对于对此有更多背景知识的人,请 Immo Landwerth (Microsoft .NET上的程序经理)tweeted关于此事:

“ HttpClient最初是作为NuGet包(带外)开始的,并且也在4.5(内置)中添加到.NET Framework中。

使用.NET Core / .NET Standard,我们最初尝试将.NET平台建模为一组程序包,而不再需要内置或带外。但是,这比我们预期的更为混乱和复杂。

结果,我们在很大程度上放弃了将.NET平台建模为具有Core / Standard 2.0的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 Framework上运行并不顺利。

旧版软件包的预期模型是:如果您使用.NET Framework 4.5 + 、. NET Core 2 + 、. NET Standard 2+中的软件包,则该软件包仅转发到平台提供的实现,而不是自带版本。

这并不是在所有情况下实际发生的情况:HTTP客户端程序包将(部分)替换.NET Framework上的内置组件,这些组件可能对某些客户有效而对其他客户而言无效。因此,我们现在无法轻松解决此问题。

最重要的是,.NET Framework存在常见的绑定问题,因此,仅当您添加绑定重定向时,它才能真正正常工作。是的!

因此,作为图书馆作者,我的建议是避免依赖于此程序包,而希望使用.NET Framework 4.5,.NET Core 2.0和.NET Standard 2.0中的内置版本。”

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

答案 2 :(得分:6)

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

为此,如果您只是.NET Framework或.NET Core,那么System.Net.Http就可以了。否则,Microsoft.Net.Http将是更好的选择,因为它可能是下一代。