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 【问题描述】:我对@987654322@ 的包装感到困惑。早些时候,它作为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 平台(ios、android)呢?新的System.Net.Http
支持它们,但我记得Microsoft.Net.Http
我必须另外安装Microsoft.Bcl.Build
和Microsoft.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;