forked from ThreeMammals/Ocelot
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ThreeMammals#438 removed singleton delegating handlers as you cannot …
…have these (ThreeMammals#456)
- Loading branch information
1 parent
a419ed6
commit c8b72f3
Showing
8 changed files
with
643 additions
and
601 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,79 +1,66 @@ | ||
Delegating Handers | ||
================== | ||
|
||
Ocelot allows the user to add delegating handlers to the HttpClient transport. This feature was requested `GitHub #208 <https://github.com/TomPallister/Ocelot/issues/208>`_ | ||
and I decided that it was going to be useful in various ways. Since then we extended it in `GitHub #264 <https://github.com/TomPallister/Ocelot/issues/264>`_. | ||
|
||
Usage | ||
^^^^^ | ||
|
||
In order to add delegating handlers to the HttpClient transport you need to do two main things. | ||
|
||
First in order to create a class that can be used a delegating handler it must look as follows. We are going to register these handlers in the | ||
asp.net core container so you can inject any other services you have registered into the constructor of your handler. | ||
|
||
.. code-block:: csharp | ||
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.. | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddSingletonDelegatingHandler<FakeHandler>() | ||
.AddSingletonDelegatingHandler<FakeHandlerTwo>() | ||
Or transient as below... | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddTransientDelegatingHandler<FakeHandler>() | ||
.AddTransientDelegatingHandler<FakeHandlerTwo>() | ||
Both of these Add methods have a default parameter called global which is set to false. If it is false then the intent of | ||
the DelegatingHandler is to be applied to specific ReRoutes via ocelot.json (more on that later). If it is set to true | ||
then it becomes a global handler and will be applied to all ReRoutes. | ||
|
||
e.g. | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddSingletonDelegatingHandler<FakeHandler>(true) | ||
Or transient as below... | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddTransientDelegatingHandler<FakeHandler>(true) | ||
Finally if you want ReRoute specific DelegatingHandlers or to order your specific and / or global (more on this later) DelegatingHandlers | ||
then you must add the following json to the specific ReRoute in ocelot.json. The names in the array must match the class names of your | ||
DelegatingHandlers for Ocelot to match them together. | ||
|
||
.. code-block:: json | ||
"DelegatingHandlers": [ | ||
"FakeHandlerTwo", | ||
"FakeHandler" | ||
] | ||
You can have as many DelegatingHandlers as you want and they are run in the following order: | ||
|
||
1. Any globals that are left in the order they were added to services and are not in the DelegatingHandlers array from ocelot.json. | ||
2. Any non global DelegatingHandlers plus any globals that were in the DelegatingHandlers array from ocelot.json ordered as they are in the DelegatingHandlers array. | ||
3. Tracing DelegatingHandler if enabled (see tracing docs). | ||
4. QoS DelegatingHandler if enabled (see QoS docs). | ||
5. The HttpClient sends the HttpRequestMessage. | ||
|
||
Hopefully other people will find this feature useful! | ||
Delegating Handlers | ||
=================== | ||
|
||
Ocelot allows the user to add delegating handlers to the HttpClient transport. This feature was requested `GitHub #208 <https://github.com/TomPallister/Ocelot/issues/208>`_ | ||
and I decided that it was going to be useful in various ways. Since then we extended it in `GitHub #264 <https://github.com/TomPallister/Ocelot/issues/264>`_. | ||
|
||
Usage | ||
^^^^^ | ||
|
||
In order to add delegating handlers to the HttpClient transport you need to do two main things. | ||
|
||
First in order to create a class that can be used a delegating handler it must look as follows. We are going to register these handlers in the | ||
asp.net core container so you can inject any other services you have registered into the constructor of your handler. | ||
|
||
.. code-block:: csharp | ||
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 like below... | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddDelegatingHandler<FakeHandler>() | ||
.AddDelegatingHandler<FakeHandlerTwo>() | ||
Both of these Add methods have a default parameter called global which is set to false. If it is false then the intent of | ||
the DelegatingHandler is to be applied to specific ReRoutes via ocelot.json (more on that later). If it is set to true | ||
then it becomes a global handler and will be applied to all ReRoutes. | ||
|
||
e.g. | ||
|
||
As below... | ||
|
||
.. code-block:: csharp | ||
services.AddOcelot() | ||
.AddDelegatingHandler<FakeHandler>(true) | ||
Finally if you want ReRoute specific DelegatingHandlers or to order your specific and / or global (more on this later) DelegatingHandlers | ||
then you must add the following json to the specific ReRoute in ocelot.json. The names in the array must match the class names of your | ||
DelegatingHandlers for Ocelot to match them together. | ||
|
||
.. code-block:: json | ||
"DelegatingHandlers": [ | ||
"FakeHandlerTwo", | ||
"FakeHandler" | ||
] | ||
You can have as many DelegatingHandlers as you want and they are run in the following order: | ||
|
||
1. Any globals that are left in the order they were added to services and are not in the DelegatingHandlers array from ocelot.json. | ||
2. Any non global DelegatingHandlers plus any globals that were in the DelegatingHandlers array from ocelot.json ordered as they are in the DelegatingHandlers array. | ||
3. Tracing DelegatingHandler if enabled (see tracing docs). | ||
4. QoS DelegatingHandler if enabled (see QoS docs). | ||
5. The HttpClient sends the HttpRequestMessage. | ||
|
||
Hopefully other people will find this feature useful! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
{ | ||
"projects": [ "src", "test" ], | ||
"sdk": { | ||
"version": "2.1.300" | ||
} | ||
} | ||
{ | ||
"projects": [ "src", "test" ], | ||
"sdk": { | ||
"version": "2.1.301" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.