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

39
在为 Windows 开发 .NET 4.5 桌面应用程序时,我通常使用 System.Net.Http.HttpClient 与后端 Web API 进行通信。现在我正在开发一个 Windows Store 应用程序,并注意到存在 Windows.Web.Http.HttpClient。我已经寻找了有关这两个客户端之间主要区别的信息,但没有找到任何结果。
根据MSDN的说明,我知道应该在我的 Windows Store 应用程序中开始使用 Windows.Web.Http.HttpClient,因为System.Net.Http.HttpClient 可能会从 API 中删除:
“注意”:System.Net.Http 和 System.Net.Http.Headers 命名空间将来可能不可用于 Windows Store 应用程序。从 Windows 8.1 和 Windows Server 2012 R2 开始,请使用 Windows.Web.Http 命名空间中的 Windows.Web.Http.HttpClient 以及相关的 Windows.Web.Http.Headers 和 Windows.Web.Http.Filters 命名空间作为 Windows 运行时应用程序的替代方法。
除此信息外,我很难弄清楚使用 Windows.Web.Http.HttpClient 的主要区别和主要优点是什么?它添加了什么,我们在 System.Net.Http.HttpClient 中还没有得到的内容呢?
非常感谢提供官方文档支持的答案。

3
可能是依赖关系。System.Net.Http 可能依赖于在 Windows 10 中针对商店应用程序不可用的 .NET 或 Win32 模块或函数。 - CodeCaster
2个回答

44

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

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

Windows.Web.Http优势

  • WinRT API是用本地代码编写的,这意味着更好的性能。
  • Windows.Web.Http建立在通用的Windows HTTP堆栈之上,并重用其他Windows组件已经在使用的资源。System.Net.Http是HTTP协议的另一个实现,没有被其他Windows组件频繁使用。因此,在某些情况下,选择Windows.Web.Http可以节省资源。
  • Windows.Web.Http与WinRT类型(例如IInputStream、IOutputStream和IBuffer)更好地集成。避免使用.NET扩展将System.IO.Stream转换为IInputStream或IOutputStream以及System.Array转换为Windows.Storage.Streams.IBuffer,可以在某些情况下提高性能并节省资源。
  • Windows.Web.Http具有新功能,例如HTTP/2支持
  • 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(可移植类库)非常简单。
  • Windows 8 和 8.1 项目或桌面项目:
    • 身份验证标头和凭据针对每个 HttpClient 隔离(示例
    • Cookie 容器针对每个 HttpClient 隔离
    • 不缓存 HTTP 响应,因此后续请求永远不会来自缓存,这是服务器未设置正确的 Cache-Control 标头的常见问题(示例
    • System.Net.NetworkCredential 兼容

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

更多阅读:揭秘通用Windows平台中的HttpClient APIs


15

关于此事没有太多可找到的信息,以下是我所想到的一些事情:

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

一些有用的信息可以在这篇博客文章中找到,该文章还引用了此Build视频。他们谈到了更好的缓存控制,以及添加身份验证过滤器、轻松访问cookie、重新连接等的方法。


3
非常有道理。感谢分享你的想法。我也看了部分 Build 视频,必须承认,我不明白微软如何花时间宣传这个新客户端,却没有提供有关如何使用这组新功能以及其与现有的“System.Net.Http.HttpClient”有何不同的详细信息。无论如何,再次感谢。 - Lasse Christiansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接