你的位置:首页 > 软件开发 > ASP.net > 1、揭秘通用平台的 HttpClient (译)

1、揭秘通用平台的 HttpClient (译)

发布时间:2016-02-25 11:00:11
原文链接:Demystifying HttpClient APIs in the Universal Windows Platform  正打算翻译这篇文章时,发现园子里已经有朋友翻译过了,既然已经开始了,就再概要的翻译一遍吧,就不逐字逐句了 :) 。这段时间没有春节前那么 ...

1、揭秘通用平台的 HttpClient (译)

  原文链接:Demystifying HttpClient APIs in the Universal Windows Platform

  正打算翻译这篇文章时,发现园子里已经有朋友翻译过了,既然已经开始了,就再概要的翻译一遍吧,就不逐字逐句了 :)  。这段时间没有春节前那么忙了,正好整理一下技术文档。

 

译文:

  作为一个 Universal Windows Platform (UWP) app 开发者,如果想通过 HTTP 协议与 web服务器端进行交互,你有很多的 API 可以选择。两个最常用、较为推荐的是  System.Net.Http.HttpClient 和 Windows.Web.Http.HttpClient。相对于较老的 WebClient 和 HttpWebRequest(虽然为了向后兼容, HttpWebRequest 仍然在 UWP中可以使用),推荐使用 HttpClient。

   

  我们已经收到一些关于这两个 API 的问题,它们之间功能的异同,在什么时候使用哪一个等等。在这个文章里面我们会说明这两个 API 的目的。

 

概述  

  在 .NET 4.5 中 System.Net.Http.HttpClient API 首次被引入,并且通过 NuGet 包,向下为 .NET 4.0 和 Windows Phone8 Sliverlight app 提供支持。相对于老的 HttpWebRequest,这个 API 的目的只为了提供一个 HTTP 客户端一个轻量级、易扩展的抽象层。直到 Windows8.1,这个 API 在底层通过托管的 .NET完全实现了。在 Windows10 上,这个 API 在 UWP中改为基于 Window.Web.Http 和 Windows 的 WinlNet HTTP 协议栈实现了。

  另一方面, Windows.Web.Http.HttpClient API 第一次在 Windows 8.1 和 Windows Phone8.1 上引入。目的是在不同的 Windows app 语言(C#、VB、C++、JavaScript)提供一个统一的 HTTP API 支持。大多数的 Syste.Net.Http 命名空间下的 API 是基于Windows D的 WinlNet HTTP协议栈设计实现的。

  在 Windows Store app 中使用这些 API,支持的系统版本和编程语言:

  

API  系统版本支持的语言
System.Net.Http.HttpClientWindows,Windows Phone8 以上  仅 .NET 语言
Windows.Web.Http.HttpClientWindows,Windows Phone8.1 以上所有 Windows Store app 语言

 

应该使用哪个?

  这个两个 API 在 UWP 中都可以使用,最大的问题就是在 app 中使用哪一个。这取决于两个因素:

  1、你是否需要继承原 UI来收集用户凭据;控制 HTTP 缓存读、写;传递客户端指定的 SSL 验证凭据?

  如果是,那么就使用 Windows.Web.Http.HttpClient。到目前为止,这个 Windows.Web.Http API 提供了比 System.Net.Http API 对 Http 设置更强的控制。在未来 UWP 的版本中,这个 System.Net.Http API 可能会获得相同的功能支持。

  2、你是否想写跨 .NET 平台的代码(UWP/get='_blank'>ASP.NET 5/ iOS 和 Android)?

  如果是,那么就使用 System.Net.Http API。这可以让你写其它 .NET 平台的代码,比如 ASP.NET 和 .NET Framework 桌面应用。基于 Xamarin, 这 API 同样支持 iOS 和 Android。

 

对象模型

  现在我们理解了这两个相似 API 的目的和原理,我们分别详细看一下它们的对象模型。

 

  System.Net.Http

  最上层的抽象是 HttpClient 对象,它作为 HTTP 协议中 “客户端-服务器” 模型中的客户端实体。这个 Client 可以向服务器端发出多个请求(由 HttpRequestMessage 表示),然后收到相应的响应(由 HttpResponseMessage表示)。每个 HTTP 请求和响应的实体 body 和 headers 由基类 HttpContent 、派生类如 StreamContent、MultipartContent 和 StringContent 表示。它们表示不同的 HTTP 实体 body。他们分别提供一些 ReadAs* 方法来读取请求的 body 或者作为 string 、byte 数组或者 stream 进行响应。

 

  每一个 HttpClient 对象在底层有一个代表所有 HTTP协议设置相关的 handler 对象。理论上说,你可以认为这个 handler 代表客户端的 HTTP协议栈。它负责发送客户端的 HTTP请求到服务器端,并且把响应传输回客户端。

  在 System.Net.Http API 中使用的默认 handler 类是 HttpClientHandler 。当你创建一个 HttpClient 实体对象时 — 例如,调用 new HttpClient() —  会自动为你的默认 HTTP 协议栈设置创建一个 HttpClientHandler 对象。如果你想更改默认的设置,比如缓存行为、自动压缩、认证、代理,你可以创建你自己的 HttpClientHandler 实体,更改它的属性,然后把它传递给 HttpClient 的构造函数中,比如:

 

HttpClientHandler myHandler = new HttpClientHandler();myHandler.AllowAutoRedirect = false;HttpClient myClient = new HttpClient(myHandler);

原标题:1、揭秘通用平台的 HttpClient (译)

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。