Ocelot中文文件-委託處理程式
阿新 • • 發佈:2019-01-09
原文:
Ocelot中文文件-委託處理程式
Ocelot允許使用者將委託處理程式新增到HttpClient傳輸中。 這個功能在github #208中提出,我確定它會以各種方式被使用。之後我們在GitHub#264中進行了擴充套件。
用法
為了將委託處理程式新增到HttpClient傳輸中,有兩件重要的事情要做。
首先,為了建立一個可以用於委託處理程式的類,它必須如下所示。 我們將在asp.net core容器中註冊這些處理程式,以便您可以將您已註冊的其他服務注入到處理程式的建構函式中。
public class FakeHandler : DelegatingHandler { protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { //do stuff and optionally call the base handler.. return await base.SendAsync(request, cancellationToken); } }
Next you must add the handlers to Ocelot’s container either as singleton like follows..
其次,您必須將處理程式新增到Ocelot的容器,要麼作為單例註冊。
services.AddOcelot()
.AddSingletonDelegatingHandler<FakeHandler>()
.AddSingletonDelegatingHandler<FakeHandlerTwo>()
要麼註冊為臨時的...
services.AddOcelot() .AddTransientDelegatingHandler<FakeHandler>() .AddTransientDelegatingHandler<FakeHandlerTwo>()
這兩個Add方法都有一個名為global的引數,它預設為false。 如果它是false,那麼DelegatingHandler需要通過ocelot.json設定特定的ReRoutes(稍後更多)。 如果設定為true,則它將成為全域性處理程式,並將應用於所有ReRoutes。
例如:
services.AddOcelot()
.AddSingletonDelegatingHandler<FakeHandler>(true)
或者臨時註冊
services.AddOcelot() .AddTransientDelegatingHandler<FakeHandler>(true)
最後,如果你想要ReRoute指定DelegatingHandlers為你的特定DelegatingHandlers,或全域性(稍後會詳細介紹)DelegatingHandlers,那麼你必須將下面的json新增到ocelot.json中的特定ReRoute中。 陣列中的名稱必須與您的DelegatingHandlers類名匹配,以便Ocelot將它們匹配在一起。
"DelegatingHandlers": [
"FakeHandlerTwo",
"FakeHandler"
]
你可以有多個DelegatingHandlers,他們的執行順序如下:
- 所有在服務中並且不在ocelot.json的DelegatingHandlers陣列中的全域性處理程式按加入的順序排序。
- 所有非全域性的DelegatingHandlers以及來自ocelot.json的DelegatingHandlers陣列中的所有全域性變數都按照它們在DelegatingHandlers陣列中的順序排列。
- 如果啟用了跟蹤,那麼這一步是跟蹤DelegatingHandler(看跟蹤文件).
- 如果啟用了QoS,那麼這一步是QoS DelegatingHandler (看服務質文件).
- HttpClient發生HttpRequestMessage.
希望其他人會洞悉這個功能是很有用的!