2021年4月19日 星期一

ASP.NET Core 3.1 注入 HttpClientFactory

需要介接第三方WebApi 時候,後端通常透過 WebClient 或 HttpClient 來達到目的,

由於  asp.net core 2.1 (.net framework 4.6 亦有)即推出了具有 Connection Pool 管理機制

HttpClientFactory,故這邊簡單說明如何使用。


基本使用

於 Controller 建構式注入 IHttpClientFactory


於 Get Action 實作相關內容,這部分單純取得網頁內容(注意若是big5 編碼內容,可能會有問題需調整

,可參考)


Startup.cs 設定,加入 HttpClient


執行後呈現,成功抓取網頁內容



使用具名設定

Startup.cs 設定中,新增 HttpClient 時傳入參數,第一個參數是指定 client 名稱,

第二個參數是 Action ,可以指定 BaseAddress 或是其他屬性,如下參考


此時, Controller 可以這樣調整,在 CreateClient 需要指定 參數,才會吃到 Startup.cs 的設定

,下一個 GetStringAsync 方法,會以前面 BaseAddress 設定的基礎,再加上你傳入的路徑,

組合起來為完整 Request url。


執行後呈現,成功抓取網頁內容


使用具型別設定

這邊使用自訂 Class 裡面有 HttpClient ,然後透過注入方式,引入該物件,

首先設計一個類別 MyService,其中建構式傳入 HttpClient 物件,而 Send 方法取得網頁內容


此時的 Controller 調整設定,建構式傳入 MyService 物件,並於 Get Action 透過 service 物件呼叫 send 方法

取得網頁內容後回傳


Startup.cs 設定,直接透過 HttpClient 設定 MyService



執行後呈現,成功抓取網頁內容



提醒一下,在 Startup.cs 中,不需要先註冊 MyService ,如下所示(加在HttpClient 也無法)


加了會掛點



其實,具名型別我不常用;若要透過某個類別執行 HttpClient 的動作,會透過基本的注

入方式,將HttpClientFactory 與該類別一起帶到 Controller 中,並且視情況將 httpClient 設定給

該類別使用,以下是調整的版本


調整 MyService,開出 HttpClient 屬性 ,其他照舊


Controller 調整,透過建構式將 HttpClientFactory、MyService 注入,並且指定給 Field,

並且於 Get Action 中,設定 service 的 httpclient


Startup.cs 調整,註冊 MyService 與加入HttpClient 即可


執行後呈現,成功抓取網頁內容



以上就是幾種基本使用 HttpClientFactory 的方式,僅供參考


參考

 

沒有留言:

張貼留言