System.Net.Http 与 Microsoft.Net.Http 的当前状态

Posted

技术标签:

【中文标题】System.Net.Http 与 Microsoft.Net.Http 的当前状态【英文标题】:The current status of System.Net.Http vs. Microsoft.Net.Http 【发布时间】:2016-12-25 06:38:30 【问题描述】:

我对@9​​87654322@ 的包装感到困惑。早些时候,它作为Microsoft.Http.Net NuGet 包的一部分分发,而System.Net.Http 被认为是旧版。看起来现在情况正好相反:有一个适用于所有平台的新 System.Net.Http 包,而 Microsoft.Net.Http 有一段时间没有更新,据微软开发团队的人说,它将被弃用。

那么问题:

我们能否将Microsoft.Net.Http NuGet 包的依赖项替换为(最新的)System.Net.Http? 旧版 .NET 4.0 平台是否仍应使用 Microsoft.Net.Http? 非 Windows 平台(iosandroid)呢?新的System.Net.Http 支持它们,但我记得Microsoft.Net.Http 我必须另外安装Microsoft.Bcl.BuildMicrosoft.Bcl 才能让跨平台的东西工作。 System.Net.Http 不依赖于它们。 Bcl 包可以跳过吗? System.Net.Http 缺少一些 Http 扩展方法,如 SupportsPreAuthenticate,尝试调用这些方法会导致运行时错误(缺少方法)。我们应该如何处理?

【问题讨论】:

System.Net.Http vs Microsoft.Net.Http的可能重复 只是给出改变的可能原因:Windows 平台和其他操作系统之间的网络堆栈功能略有不同。例如,我在 Mono 环境中使用为 Windows 编写的 .NET 应用程序时遇到了麻烦。这种变化可能表明最终将有可能真正独立于平台,这可能就是他们将事物移动到 System 命名空间的原因。从 .NET Core 中查找对此 Http 包的引用,这可能会回答您的问题。 查看从 Microsoft.Net.Http nuget 下载的包,HttpClient 的唯一实现是 net40、portable-net40+sl4+win8+wp71+wpa81、sl4-windowsphone71。对于剩余的平台,没有实现,所以我猜 System-one 被选中了? 【参考方案1】:

这已经有很长一段时间了,而且仍然令人困惑。我自己也看到过这样的消息,但就目前而言,System.Net.Http 似乎是正确的选择,至少对于 Windows 平台上的 .NET 并且没有外部依赖项。

对于 .NET Core,我使用了 Microsoft.Net.Http,尽管它确实需要 Microsoft.BCL。除非您遇到问题,否则我建议保留遗留系统,尤其是因为这些命名空间似乎是移动目标。

如果这对您来说还不够混乱,从System.Net.Http 链接的HttpClient Sample 使用Windows.Web.Http!该实现适用于 Windows 应用商店应用。

也许明年这一切都会再次改变。

【讨论】:

OMG .. 我们不能从权威人士那里得到一个规范的答案吗? :(

以上是关于System.Net.Http 与 Microsoft.Net.Http 的当前状态的主要内容,如果未能解决你的问题,请参考以下文章

@inject HttpClient 与 @using System.Net.Http 之间的问题;在查看页面

System.Net.Http.HttpClient 不尊重超时并每次使用默认值

在 Windows.Web.Http 和 System.Net.Http 中混淆使用哪个版本的 HttpClient;

ASP.NET web api汇总

System.Net.Http.HttpClient 不包含 DownloadData 的定义

System.Net.Http.HttpClient 缓存行为