diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
index b716a9cd9e..1ccf7a2af5 100644
--- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
+++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
@@ -29,11 +29,15 @@ namespace Microsoft.Extensions.DependencyInjection
///
/// True, to register the HTTP client proxy as the default implementation for the services.
///
+ ///
+ /// A delegate that is used to configure an .
+ ///
public static IServiceCollection AddHttpClientProxies(
[NotNull] this IServiceCollection services,
[NotNull] Assembly assembly,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
- bool asDefaultServices = true)
+ bool asDefaultServices = true,
+ Action configureHttpClientBuilder = null)
{
Check.NotNull(services, nameof(assembly));
@@ -49,7 +53,8 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddHttpClientProxy(
serviceType,
remoteServiceConfigurationName,
- asDefaultServices
+ asDefaultServices,
+ configureHttpClientBuilder
);
}
@@ -68,15 +73,20 @@ namespace Microsoft.Extensions.DependencyInjection
///
/// True, to register the HTTP client proxy as the default implementation for the service .
///
+ ///
+ /// A delegate that is used to configure an .
+ ///
public static IServiceCollection AddHttpClientProxy(
[NotNull] this IServiceCollection services,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
- bool asDefaultService = true)
+ bool asDefaultService = true,
+ Action configureHttpClientBuilder = null)
{
return services.AddHttpClientProxy(
typeof(T),
remoteServiceConfigurationName,
- asDefaultService
+ asDefaultService,
+ configureHttpClientBuilder
);
}
@@ -92,11 +102,15 @@ namespace Microsoft.Extensions.DependencyInjection
///
/// True, to register the HTTP client proxy as the default implementation for the service .
///
+ ///
+ /// A delegate that is used to configure an .
+ ///
public static IServiceCollection AddHttpClientProxy(
[NotNull] this IServiceCollection services,
[NotNull] Type type,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
- bool asDefaultService = true)
+ bool asDefaultService = true,
+ Action configureHttpClientBuilder = null)
{
Check.NotNull(services, nameof(services));
Check.NotNull(type, nameof(type));
@@ -108,10 +122,17 @@ namespace Microsoft.Extensions.DependencyInjection
});
//use IHttpClientFactory and polly
- services.AddHttpClient(remoteServiceConfigurationName)
- .AddTransientHttpErrorPolicy(builder =>
+ var httpClientBuilder = services.AddHttpClient(remoteServiceConfigurationName);
+ if (configureHttpClientBuilder == null)
+ {
+ httpClientBuilder.AddTransientHttpErrorPolicy(builder =>
// retry 3 times
builder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))));
+ }
+ else
+ {
+ configureHttpClientBuilder.Invoke(httpClientBuilder);
+ }
var interceptorType = typeof(DynamicHttpProxyInterceptor<>).MakeGenericType(type);
services.AddTransient(interceptorType);