System.Net.Http.HttpClient 与 Windows.Web.Http.HttpClient - 主要区别是什么?

System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - What are the main differences?

在为 Windows 开发 .NET 4.5 桌面应用程序时,我习惯使用 System.Net.Http.HttpClient 与后端 Web API 进行所有通信。我现在正在开发一个 Windows 商店应用程序并注意到 Windows.Web.Http.HttpClient 的存在。我一直在寻找有关这两个客户之间主要区别的信息,但没有任何运气。

From MSDN 我知道我应该开始在我的 Windows 商店应用程序中使用 Windows.Web.Http.HttpClient,因为 System.Net.Http.HttpClient 可能会从 API 中删除:

Note The System.Net.Http and System.Net.Http.Headers namespace might not be available in future versions of Windows for use by Windows Store apps. Starting with Windows 8.1 and Windows Server 2012 R2, use Windows.Web.Http.HttpClient in the Windows.Web.Http namespace and the related Windows.Web.Http.Headers and Windows.Web.Http.Filters namespaces instead for Windows Runtime apps.

但是除了这些信息,我很难弄清楚主要区别是什么以及使用 Windows.Web.Http.HttpClient 的主要好处是什么? System.Net.Http.HttpClient 中还没有添加什么内容?

非常感谢官方文档支持的答案。

关于它的信息不多。我想到的一些事情:

  • 新的 API 不依赖于一些低级 Windows 函数,就像当前的 API 那样。
  • 新的 API 能够更好地处理与 HTTP 协议相关的新方法,例如 WebSockets 等

可以在 this blog post which also referenced this Build video 中找到一些有用的信息。他们谈到了更好的缓存控制,以及一种添加过滤器以进行身份​​验证、轻松访问 cookie、重新连接等的方法。

Windows.Web.Http 是一个 WinRT API,支持所有 WinRT 编程语言:C#、VB、C++/CX 和 JavaScript。这使您可以选择用您选择的语言编写相同的代码。

System.Net.Http 是 .NET API,它仅适用于 C# 和 VB 开发人员。

Windows.Web.Http优点

  • WinRT APIs 是用本机代码编写的,这意味着更好的性能。
  • Windows.Web.Http 位于通用 Windows HTTP 堆栈之上,并重用已被其他 Windows 组件使用的资源。 System.Net.Http 是其他 Windows 组件不经常使用的 HTTP 协议的单独实现。因此,在某些情况下,您可以通过选择 Windows.Web.Http.
  • 来节省资源
  • Windows.Web.Http 与 IInputStreamIOutputStreamIBuffer 等 WinRT 类型的集成更好。避免将 System.IO.Stream 转换为 IInputStreamIOutputStream 以及将 System.Array 转换为 Windows.Storage.Streams.IBuffer 的 .NET 扩展在某些情况下可以提高性能并节省资源。
  • Windows.Web.Http 具有新功能,例如 HTTP/2 support
  • Windows.Web.Http 是基于 COM 的,可以被任何理解 COM 的编程语言使用。

System.Net.Http优点

  • System.Net.Http 自 Windows 8 或 .NET 4.5 起可用,而 Windows.Web.Http 仅自 Windows 8.1 和 Windows Phone 起可用8.1.
  • 直接使用 System.Net.Http 将 WinRT 代码移植到 ASP.NET 或 Xamarin(便携式 Class 库)
  • Windows 8 和 8.1 项目或桌面项目:†
    • 身份验证 header 和凭据根据 HttpClient (example)
    • 隔离
    • 每个 HttpClient
    • 隔离的 Cookie 容器
    • 不缓存 HTTP 响应,因此后续请求永远不会来自缓存,这是未设置正确的服务器的常见问题 Cache-Control header (example)
    • 适用于 System.Net.NetworkCredential

† 对于 Windows 通用项目 (UWP),System.Net.Http 是 Windows.Web.Http 之上的包装器,如 here 所述。

进一步阅读:Demystifying HttpClient APIs in the Universal Windows Platform