天天看點

Asp.Net Web API 2第四課——HttpClient消息處理器

Asp.Net Web API 導航

前言

消息處理器是一個接收HTTP請求,并傳回HTTP響應的一個類。

比較有代表性的時,一系列的消息處理被連結在一起。第一個處理器接收HTTP請求,做一些處理,然後将此請求傳給下一個處理器。在某個點上,這個響應被建立,被進行回溯。這種模式就叫做委托處理器。

Asp.Net Web API 2第四課——HttpClient消息處理器

在用戶端,HTTPClient類使用一個消息處理器來處理請求。預設的處理器是HTTPClientHandler,它通過網絡發送請求,并從伺服器上獲得響應。你可以把自定義消息處理器插入到用戶端管道中。

Asp.Net Web API 2第四課——HttpClient消息處理器
Asp.Net Web API也可以使用服務端的消息處理器。更多的資訊請參考"HTTP消息處理器"(暫未實作。)

自定義消息處理器

 要編寫一個消息處理器,需要從System.Net.Http.DelegatingHandler進行派生,并重寫SendAsync方法。以下是該方法的簽名:

這個方法以HttpRequestMessage參數作為輸入,并異步地傳回一個HttpResponseMessage。一種典型的實作如下:

  1.處理請求消息。

  2.調用base.SendAsync将請求發送給内部處理器。

  3.内部處理器傳回一條響應消息。(這一步是異步的)

  4.處理響應,并把他傳回給調用者。

以下示例展示了一個消息處理器,它添加了一個自定義的标頭給外部的請求。

Asp.Net Web API 2第四課——HttpClient消息處理器

對base.SendAsync的調用是異步的。如果處理器在調用之後還要做一些工作,需使用await關鍵字,以便在方法完成之後繼續執行。

以下示例展示了一個對錯誤碼進行日志的處理器。如何進行日志沒多大關系,但此例展示了如何得到處理器内部的響應。

将消息處理器添加到用戶端管線

 要将自定義處理器添加到HttpClient,需使用HttpClientFactory.Create方法:

消息處理器是按照它們傳遞給Create方法中的順序來調用的。是以處理器是内嵌的,響應消息以反方向傳遞。即,最後一個處理器首先得到響應消息。

總結

 本文主要講解HTTPClient消息處理器。涉及到的代碼在文中都有過展示,暫時就不進行上傳了。

繼續閱讀