System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - 主要区别是啥?
Posted
技术标签:
【中文标题】System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - 主要区别是啥?【英文标题】:System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - What are the main differences?System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - 主要区别是什么? 【发布时间】:2015-07-08 11:13:54 【问题描述】:在为 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 中删除:
注意 System.Net.Http 和 System.Net.Http.Headers 命名空间在未来的 Windows 版本中可能无法供 Windows 应用商店应用使用。从 Windows 8.1 和 Windows Server 2012 R2 开始,在 Windows.Web.Http 命名空间以及相关的 Windows.Web.Http.Headers 和 Windows.Web.Http.Filters 命名空间中使用 Windows.Web.Http.HttpClient 来代替 Windows 运行时应用.
但是除了这些信息之外,我很难弄清楚使用Windows.Web.Http.HttpClient
的主要区别是什么以及主要的好处是什么?它增加了什么是我们在System.Net.Http.HttpClient
中没有的?
非常感谢官方文档支持的答案。
【问题讨论】:
可能是依赖关系。 System.Net.Http 可能依赖于 .NET 或 Win32 模块或函数,这些模块或函数可能不适用于从 Windows 10 开始的应用商店应用。 【参考方案1】: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 是其他 Windows 组件不经常使用的 HTTP 协议的单独实现。因此,在某些情况下,您可以通过选择 Windows.Web.Http 来节省资源。 Windows.Web.Http与IInputStream
、IOutputStream
和IBuffer
等WinRT类型有更好的集成。在某些情况下,避免将System.IO.Stream
转换为IInputStream
或IOutputStream
和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(可移植类库) Windows 8 和 8.1 项目或桌面项目:† 根据HttpClient
(example) 隔离身份验证标头和凭据
根据HttpClient
隔离的 Cookie 容器
不缓存 HTTP 响应,因此后续请求永远不会来自缓存,这是未设置正确 Cache-Control
标头 (example) 的服务器的常见问题
适用于System.Net.NetworkCredential
† 对于 Windows 通用项目 (UWP),System.Net.Http 是 Windows.Web.Http 之上的包装器,如 here 所述。
延伸阅读:Demystifying HttpClient APIs in the Universal Windows Platform
【讨论】:
【参考方案2】:关于它的信息并不多。我想到的一些事情:
新 API 不像当前 API 那样依赖于某些低级 Windows 函数。 新的 API 能够更好地处理与 HTTP 协议相关的新方法,例如 WebSockets 等。一些有用的信息可以在this blog post 中找到,它也引用了this Build video。他们谈到了更好的缓存控制,以及添加过滤器以进行身份验证、轻松访问 cookie、重新连接等的方法。
【讨论】:
这很有意义。感谢您分享您的想法。我也看过 Build 视频的部分内容,我不得不承认,我无法理解 MS 如何花时间宣传这个新客户端,然后没有提供它与现有System.Net.Http.HttpClient
的区别以及如何使用这个集合的详细信息的新功能。但无论如何,再次感谢。以上是关于System.Net.Http.HttpClient vs Windows.Web.Http.HttpClient - 主要区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章