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

时间:2015-07-08 11:13:55

标签: c# .net windows-store-apps dotnet-httpclient

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

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

  

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

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

2 个答案:

答案 0 :(得分:36)

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转换为IInputStreamIOutputStreamSystem.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将ASP.NET或Xamarin(可移植类库)移植到WinRT代码是直接的。
  • Windows 8和8.1项目或桌面项目:†
    • 根据HttpClientexample
    • 隔离身份验证标头和凭据
    • 根据HttpClient
    • 隔离的Cookie容器
    • 不缓存HTTP响应,因此后续请求永远不会来自缓存,这是未设置正确Cache-Control标题(example)的服务器的常见问题
    • 适用于System.Net.NetworkCredential

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

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

答案 1 :(得分:14)

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

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

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