@@ -13,23 +13,40 @@ sealed class HttpFactoryClient : HttpTransportClient
1313
1414 readonly IServiceProvider _provider ;
1515 readonly IOptionsMonitor < HttpClientFactoryOptions > _options ;
16+ readonly IEnumerable < IHttpMessageHandlerBuilderFilter > _filters ;
1617
17- public HttpFactoryClient ( IServiceProvider provider , IOptionsMonitor < HttpClientFactoryOptions > options )
18+ public HttpFactoryClient (
19+ IServiceProvider provider ,
20+ IOptionsMonitor < HttpClientFactoryOptions > options ,
21+ IEnumerable < IHttpMessageHandlerBuilderFilter > filters )
1822 {
1923 _provider = provider ;
2024 _options = options ;
25+ _filters = filters ;
2126 }
2227
2328 protected override HttpMessageHandler CreateHttpClientHandler ( RequestData requestData )
2429 {
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+ } ;
2739
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 ( ) )
2942 {
30- item ( builder ) ;
43+ configureHandler = filter . Configure ( configureHandler ) ;
3144 }
3245
46+ var builder = _provider . GetRequiredService < HttpMessageHandlerBuilder > ( ) ;
47+ configureHandler ( builder ) ;
48+
49+ builder . PrimaryHandler = base . CreateHttpClientHandler ( requestData ) ;
3350 return builder . Build ( ) ;
3451 }
3552}
0 commit comments