@@ -13,23 +13,40 @@ sealed class HttpFactoryClient : HttpTransportClient
13
13
14
14
readonly IServiceProvider _provider ;
15
15
readonly IOptionsMonitor < HttpClientFactoryOptions > _options ;
16
+ readonly IEnumerable < IHttpMessageHandlerBuilderFilter > _filters ;
16
17
17
- public HttpFactoryClient ( IServiceProvider provider , IOptionsMonitor < HttpClientFactoryOptions > options )
18
+ public HttpFactoryClient (
19
+ IServiceProvider provider ,
20
+ IOptionsMonitor < HttpClientFactoryOptions > options ,
21
+ IEnumerable < IHttpMessageHandlerBuilderFilter > filters )
18
22
{
19
23
_provider = provider ;
20
24
_options = options ;
25
+ _filters = filters ;
21
26
}
22
27
23
28
protected override HttpMessageHandler CreateHttpClientHandler ( RequestData requestData )
24
29
{
25
- var builder = _provider . GetRequiredService < HttpMessageHandlerBuilder > ( ) ;
26
- builder . PrimaryHandler = base . CreateHttpClientHandler ( requestData ) ;
30
+ var clientOptions = _options . Get ( ClientName ) ;
31
+
32
+ var configureHandler = ( HttpMessageHandlerBuilder builder ) =>
33
+ {
34
+ foreach ( var item in clientOptions . HttpMessageHandlerBuilderActions )
35
+ {
36
+ item ( builder ) ;
37
+ }
38
+ } ;
27
39
28
- foreach ( var item in _options . Get ( ClientName ) . HttpMessageHandlerBuilderActions )
40
+ // Not sure why filters are needed in addition to builder actions, but OK...
41
+ foreach ( var filter in _filters . Reverse ( ) )
29
42
{
30
- item ( builder ) ;
43
+ configureHandler = filter . Configure ( configureHandler ) ;
31
44
}
32
45
46
+ var builder = _provider . GetRequiredService < HttpMessageHandlerBuilder > ( ) ;
47
+ configureHandler ( builder ) ;
48
+
49
+ builder . PrimaryHandler = base . CreateHttpClientHandler ( requestData ) ;
33
50
return builder . Build ( ) ;
34
51
}
35
52
}
0 commit comments