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

标签 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,因为 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 中获取的内容?

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

最佳答案

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

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

Windows.Web.Http的优势

  • WinRT API 是用 native 代码编写的,可转化为更好的性能。
  • Windows.Web.Http 位于通用 Windows HTTP 堆栈之上,并重用已被其他 Windows 组件使用的资源。 System.Net.Http 是 HTTP 协议(protocol)的单独实现,其他 Windows 组件不经常使用它。因此,在某些情况下,您可以通过选择 Windows.Web.Http 来节省资源。
  • Windows.Web.Http 与 IInputStreamIOutputStreamIBuffer 等 WinRT 类型有更好的集成。避免将 System.IO.Stream 转换为 IInputStreamIOutputStream 和将 System.Array 转换为 Windows.Storage.Streams.IBuffer 在某些情况下可以提高性能并节省资源。
  • 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 ) 都隔离身份验证 header 和凭据
    • 每个 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

关于c# - System.Net.Http.HttpClient 与 Windows.Web.Http.HttpClient - 主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291008/

相关文章:

c# - 如何将 : Assign Keys. PageUp 到 ToolStripMenuItem.ShortcutKeys

c# - 在 MVC Razor 中回发后保持下拉选择状态?

c# - 处理 "application not found"等特定 Win32 异常的最佳方法是什么?

c# - Directory.CreateDirectory 延迟问题?

c# - 尝试中断卡在 reader.readLine() 中的线程

c# - 如何重启 XNA 游戏类(Monogame)

c# - 使用 MediaCapture 从 CaptureElement 以自定义分辨率拍摄照片

azure - 如何管理添加到WAMS中的表,或将WAMS与现有SQL DB表相关联?

没有硬编码的 C# 脚本

c# - 简单功能的继承(或其他重用方式)