diff --git a/Vonage/Configuration.cs b/Vonage/Configuration.cs
index 2594ea8a..22f2935c 100644
--- a/Vonage/Configuration.cs
+++ b/Vonage/Configuration.cs
@@ -70,10 +70,11 @@ public HttpClient Client
{
get
{
- var client = RequestsPerSecond
+ var handler = RequestsPerSecond
.Map(BuildSemaphore)
.Map(this.GetThrottlingMessageHandler)
- .Match(some => new HttpClient(some), this.BuildDefaultClient);
+ .IfNone(this.ClientHandler);
+ var client = new HttpClient(handler);
this.RequestTimeout.IfSome(value => client.Timeout = value);
return client;
}
@@ -82,7 +83,7 @@ public HttpClient Client
///
/// Exposes an HttpMessageHandler.
///
- public HttpMessageHandler ClientHandler { get; set; }
+ public HttpMessageHandler ClientHandler { get; set; } = new HttpClientHandler();
///
/// Retrieves the unique instance (Singleton).
@@ -148,11 +149,6 @@ public Credentials BuildCredentials() =>
/// The Configuration.
public static Configuration FromConfiguration(IConfiguration configuration) => new Configuration(configuration);
- private HttpClient BuildDefaultClient() =>
- this.ClientHandler == null
- ? new HttpClient()
- : new HttpClient(this.ClientHandler);
-
private static TimeSpanSemaphore BuildSemaphore(double requestsPerSecond)
{
var delay = 1 / requestsPerSecond;
@@ -160,7 +156,7 @@ private static TimeSpanSemaphore BuildSemaphore(double requestsPerSecond)
return execTimeSpanSemaphore;
}
- private ThrottlingMessageHandler GetThrottlingMessageHandler(TimeSpanSemaphore semaphore) =>
+ private HttpMessageHandler GetThrottlingMessageHandler(TimeSpanSemaphore semaphore) =>
this.ClientHandler != null
? new ThrottlingMessageHandler(semaphore, this.ClientHandler)
: new ThrottlingMessageHandler(semaphore);
diff --git a/Vonage/VonageClient.cs b/Vonage/VonageClient.cs
index 6f06d6d6..394d9d91 100644
--- a/Vonage/VonageClient.cs
+++ b/Vonage/VonageClient.cs
@@ -140,9 +140,9 @@ private VonageHttpClientConfiguration BuildConfiguration(HttpClient client) =>
private Configuration GetConfiguration() => this.configuration.IfNone(Configuration.Instance);
- private HttpClient InitializeHttpClient(Uri baseUri)
+ private HttpClient InitializeHttpClient(HttpMessageHandler handler, Uri baseUri)
{
- var client = new HttpClient(new HttpClientHandler())
+ var client = new HttpClient(handler)
{
BaseAddress = baseUri,
};
@@ -166,30 +166,20 @@ private void PropagateCredentials()
this.SmsClient = new SmsClient(this.Credentials, this.GetConfiguration(), this.timeProvider);
this.PricingClient = new PricingClient(this.Credentials, this.GetConfiguration(), this.timeProvider);
this.MessagesClient = new MessagesClient(this.Credentials, this.GetConfiguration(), this.timeProvider);
- this.VerifyV2Client =
- new VerifyV2Client(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Nexmo)));
- this.SubAccountsClient = new SubAccountsClient(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Nexmo)),
- this.Credentials.ApiKey);
- this.NumberInsightV2Client = new NumberInsightV2Client(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Nexmo)));
- this.UsersClient =
- new UsersClient(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Nexmo)));
- this.ConversationsClient =
- new ConversationsClient(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Nexmo)));
- this.MeetingsClient = new MeetingsClient(
- this.BuildConfiguration(
- this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Get(VonageUrls.Region.EU))),
- new FileSystem());
- this.ProactiveConnectClient =
- new ProactiveConnectClient(
- this.BuildConfiguration(
- this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Get(VonageUrls.Region.EU))));
- this.VideoClient =
- new VideoClient(
- this.BuildConfiguration(this.InitializeHttpClient(this.GetConfiguration().VonageUrls.Video)));
+ var nexmoHttpClient = this.InitializeHttpClient(
+ this.GetConfiguration().ClientHandler ?? new HttpClientHandler(), this.GetConfiguration().VonageUrls.Nexmo);
+ var videoHttpClient = this.InitializeHttpClient(
+ this.GetConfiguration().ClientHandler ?? new HttpClientHandler(), this.GetConfiguration().VonageUrls.Video);
+ var euHttpClient = this.InitializeHttpClient(this.GetConfiguration().ClientHandler ?? new HttpClientHandler(),
+ this.GetConfiguration().VonageUrls.Get(VonageUrls.Region.EU));
+ this.VerifyV2Client = new VerifyV2Client(this.BuildConfiguration(nexmoHttpClient));
+ this.SubAccountsClient =
+ new SubAccountsClient(this.BuildConfiguration(nexmoHttpClient), this.Credentials.ApiKey);
+ this.NumberInsightV2Client = new NumberInsightV2Client(this.BuildConfiguration(nexmoHttpClient));
+ this.UsersClient = new UsersClient(this.BuildConfiguration(nexmoHttpClient));
+ this.ConversationsClient = new ConversationsClient(this.BuildConfiguration(nexmoHttpClient));
+ this.MeetingsClient = new MeetingsClient(this.BuildConfiguration(euHttpClient), new FileSystem());
+ this.ProactiveConnectClient = new ProactiveConnectClient(this.BuildConfiguration(euHttpClient));
+ this.VideoClient = new VideoClient(this.BuildConfiguration(videoHttpClient));
}
}
\ No newline at end of file