1. 程式人生 > >Ocelot中文文件-委託處理程式

Ocelot中文文件-委託處理程式

原文: 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,他們的執行順序如下:

  1. 所有在服務中並且不在ocelot.json的DelegatingHandlers陣列中的全域性處理程式按加入的順序排序。
  2. 所有非全域性的DelegatingHandlers以及來自ocelot.json的DelegatingHandlers陣列中的所有全域性變數都按照它們在DelegatingHandlers陣列中的順序排列。
  3. 如果啟用了跟蹤,那麼這一步是跟蹤DelegatingHandler(看跟蹤文件).
  4. 如果啟用了QoS,那麼這一步是QoS DelegatingHandler (看服務質文件).
  5. HttpClient發生HttpRequestMessage.

希望其他人會洞悉這個功能是很有用的!