From 13d9602e5412047d4f0a9fb610907ea53553d080 Mon Sep 17 00:00:00 2001 From: Matthew Abbott Date: Thu, 29 Feb 2024 17:21:10 +0000 Subject: [PATCH] fix: Do not use BaseAddress property of HttpClient (#364) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On .NET Framework, best practice is to re-use HttpClient, so using BaseAddress can cause the incorrect API URL to be used for different clients. Explicitly use the cached base address per-client when generating a HTTP request. Co-authored-by: Armando Rodríguez <127134616+armando-rodriguez-cko@users.noreply.github.com> --- src/CheckoutSdk/ApiClient.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CheckoutSdk/ApiClient.cs b/src/CheckoutSdk/ApiClient.cs index 674cbe09..eb85e005 100644 --- a/src/CheckoutSdk/ApiClient.cs +++ b/src/CheckoutSdk/ApiClient.cs @@ -20,13 +20,14 @@ public class ApiClient : IApiClient #endif private readonly HttpClient _httpClient; + private readonly Uri _baseUri; private readonly ISerializer _serializer = new JsonSerializer(); public ApiClient(IHttpClientFactory httpClientFactory, Uri baseUri) { CheckoutUtils.ValidateParams("httpClientFactory", httpClientFactory, "baseUri", baseUri); var httpClient = httpClientFactory.CreateClient(); - httpClient.BaseAddress = baseUri; + _baseUri = baseUri; _httpClient = httpClient; } @@ -230,7 +231,9 @@ private async Task Invoke( string idempotencyKey) { CheckoutUtils.ValidateParams("httpMethod", httpMethod, "authorization", authorization); - var httpRequest = new HttpRequestMessage(httpMethod, path) { Content = httpContent }; + + var pathUri = new Uri(_baseUri, path); + var httpRequest = new HttpRequestMessage(httpMethod, pathUri) { Content = httpContent }; #if (NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_1_OR_GREATER) _log.LogInformation(@"{HttpMethod}: {Path}", httpMethod, path); #endif