深入學習HttpClient(一)擴充套件額外的功能

2022-02-23 14:31:18 字數 1360 閱讀 1950

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的執行順序,是從左往右依次呼叫

【總結】

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

Php深入學習一

對於php的學習,你不可避免的要經常與前端互動,這要求你必須掌握html css js。最好還能會jquery或者angularjs以及bootstrap。後三個可以讓你開發前端更快捷 這裡面的內容對於初學者入門php完全足夠,前期不要用框架,基礎語法整紮實了,至少你要會基本的搭建環境和發布專案,常...

深入學習mysql 一

相信很多人都說過一句玩笑話,刪庫跑路哈哈哈 說到刪庫跑路,那麼你是否了解過,如何給mysql設定許可權來防止這樣的事情發生呢 如果你使用的是root許可權的賬號,你需要給不同的賬號來分配許可權時,可以使用如下的sql語句來建立對應的賬號和許可權 grant select on practice.to...

Matlab用法深入學習(一)

一 要求 通過學習matlab中矩陣的數 算 關係和邏輯運算,m檔案的編寫和使用,使學生能深入掌握matlab程式設計的方法。1 在同一幅圖上建立f 1 1 x2 和g ex3兩條曲線圖。2 曲線f用紅色 曲線g用藍色。3 區間 0,1 用等間距的30個資料點。二 方法與步驟 1 利用syms定義符...