国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入學習HttpClient(一)擴展額外的功能

2019-11-17 03:11:45
字體:
來源:轉載
供稿:網友

深入學習HttpClient(一)擴展額外的功能

HttpClient作為.net4.5新增的Http庫除了對于async/await形式的異步支持外,還向我們展示了其強大的擴展能力。

【類庫的設計】

讓我們先看下Httpclient的設計圖:

圖中我們可以清晰的看出對于HttpClient庫而言其請求的過程:

從Request發起,經過DelegatingHanlder處理后,進入InnerHandler,數據返回后再從Inner Handler 返回到Delegating Hanlder進行處理,最后返回結果。

從設計角度來講,HttpClient庫提供了強大的擴展性,使用者不需要任何繼承即可完成對HttpClient的擴展(如果對設計模式熟悉,可以清楚的看出這里用到了裝飾器模式)

先讓我們來看一段實際的代碼宏觀的對HttpClient很方便的擴展有更具體的認識:

我們首先通過代碼給Httpclient加一個DebugLog功能:

那么我們需要按下面的方式來定義:

上面代碼的幾點說明:

1、對于HttpClient這個類而言,其本身并不會進行實際的網絡請求收發處理,我們應將其理解成一個容器、一個中繼者,實際的網絡請求核心在HttpClientHanlder中,也就是前面圖中對應的Inner Handler。

2、我們自己定義了一個LoggingHandler,這個類對應Delegating Handler 是我們自定義的、裝飾在Inner Handler外的Handler

3、DelegatingHandler重載了SendAsync,在其內部調用了InnerHandler的SendAsync方法,如此我們便可以在實際請求發出,以及返回后進行各種統一的處理,總結起來仍是上面圖中畫出的,逐層調用。

一個例子可能不足以讓人理解透徹,我們可以展開思路,為httpClient定制出更多的功能,比如下面的例子:

為httpClient擴展出失敗重試的邏輯:實際使用方式

在實際使用過程中我們可以定義一個方法來統一配置httpClient:

1、注意自定義的Handler的執行順序,是從左往右依次調用

可以更深入的參考下面的文章:http://chimera.labs.oreilly.com/books/1234000001708/ch14.html

【總結】

HttpClient這一套類庫的設計相比之前而言非常的精妙,可以作為典型的設計模式教材了,而在實際開發過程中也為每個開發人員提供了網絡層架構的極大遍歷,如果你要與.net4.5打交道,那么是時候更新你的工具箱了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 织金县| 建德市| 托克逊县| 乐山市| 南开区| 平昌县| 五台县| 顺义区| 温宿县| 大英县| 宝清县| 香港| 阿荣旗| 岳普湖县| 武强县| 光泽县| 石屏县| 朝阳县| 微博| 肇源县| 甘南县| 兴文县| 梁平县| 资中县| 屏南县| 克东县| 和田市| 灵武市| 织金县| 汪清县| 澄城县| 南宁市| 泰顺县| 清水县| 溧水县| 保康县| 永德县| 应用必备| 定西市| 天水市| 白朗县|