System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient – 主要区别是什么?

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

从MSDN我知道我应该开始在我的Windowsapp store应用中使用Windows.Web.Http.HttpClient ,因为可能会从API中删除System.Net.Http.HttpClient

注意 System.Net.Http和System.Net.Http.Headers命名空间可能在Windows的未来版本中不可用,以供Windowsapp 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

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

没有太多可以找到它。 我想到的一些事情:

  • 新API与某些低级Windowsfunction没有依赖关系,就像当前的API一样。
  • 新API能够更好地处理与HTTP协议相关的新方法,如WebSockets等。

一些有用的信息可以在这篇博文中找到, 该post也引用了这个Buildvideo 。 他们谈论更好的缓存控制,以及添加filter进行身份validation,轻松访问cookie,重新连接等的方法。

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类型有更好的集成,例如IInputStreamIOutputStreamIBuffer 。 避免将System.IO.Stream转换为IInputStreamIOutputStream以及System.Array转换为Windows.Storage.Streams.IBuffer的.NET扩展可以在某些情况下提高性能并节省资源。
  • Windows.Web.Http具有新function,例如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将ASP.NET或Xamarin(可移植类库)移植到WinRT代码是很简单的
  • Windows 8和8.1项目或桌面项目:†
    • 根据HttpClient隔离身份validation标头和凭据( 示例 )
    • 每个HttpClient隔绝的曲奇饼容器
    • 不缓存HTTP响应,因此后续请求永远不会来自缓存,这是服务器没有设置正确的Cache-Control标头的常见问题( 示例 )
    • 适用于System.Net.NetworkCredential

†对于Windows Universal Projects(UWP),System.Net.Http是Windows.Web.Http之上的包装器,如此处所述。

进一步阅读: 揭开通用Windows平台中的HttpClient API的神秘面纱