From 34ea9ab493ac7d5aee11ae8535574cfa8ad107e9 Mon Sep 17 00:00:00 2001 From: Andrei Andreev Date: Tue, 23 Jun 2026 14:43:14 +0300 Subject: [PATCH 01/14] add SessionExpired to content --- MultiFactor.SelfService.Windows.Portal.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/MultiFactor.SelfService.Windows.Portal.csproj b/MultiFactor.SelfService.Windows.Portal.csproj index ba310ad..4401db1 100644 --- a/MultiFactor.SelfService.Windows.Portal.csproj +++ b/MultiFactor.SelfService.Windows.Portal.csproj @@ -642,6 +642,7 @@ + From 8e1d028bb3dc09a6070aa6298d40b3cbc3ab10b0 Mon Sep 17 00:00:00 2001 From: Andrei Andreev Date: Tue, 23 Jun 2026 17:41:44 +0300 Subject: [PATCH 02/14] null callbackurl --- Stories/SignIn/SignInStory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Stories/SignIn/SignInStory.cs b/Stories/SignIn/SignInStory.cs index 32fcc02..5698724 100644 --- a/Stories/SignIn/SignInStory.cs +++ b/Stories/SignIn/SignInStory.cs @@ -103,7 +103,7 @@ public async Task ExecuteAsync(LoginModel model, Dictionary x.Key, x => x.Value), Settings = BuildSspSettings() }; From bbe5aa6c234e6da18de9466df5368fc753d967c1 Mon Sep 17 00:00:00 2001 From: Andrei Andreev Date: Tue, 23 Jun 2026 18:11:26 +0300 Subject: [PATCH 03/14] rollback --- Stories/SignIn/SignInStory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Stories/SignIn/SignInStory.cs b/Stories/SignIn/SignInStory.cs index 5698724..32fcc02 100644 --- a/Stories/SignIn/SignInStory.cs +++ b/Stories/SignIn/SignInStory.cs @@ -103,7 +103,7 @@ public async Task ExecuteAsync(LoginModel model, Dictionary x.Key, x => x.Value), Settings = BuildSspSettings() }; From 83f4d6bb13afa274d6d6a666117dc2ccea0aed00 Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 16:13:20 +0300 Subject: [PATCH 04/14] try fix response double reading --- Core/Http/HttpClientAdapter.cs | 43 +++++++++---------- .../MultifactorIdpApi/MultifactorIdpApi.cs | 7 ++- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 39b9c85..1f89fab 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -1,5 +1,7 @@ using MultiFactor.SelfService.Windows.Portal.Abstractions.Http; +using MultiFactor.SelfService.Windows.Portal.Core; using MultiFactor.SelfService.Windows.Portal.Core.Exceptions; +using Newtonsoft.Json; using Serilog; using System; using System.Collections.Generic; @@ -51,9 +53,7 @@ public async Task GetAsync(string uri, IReadOnlyDictionary HttpClientUtils.AddHeadersIfExist(message, headers); var resp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - if (resp.Content == null) return default; - - return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); + return await ReadAndDeserializeAsync(resp); } public async Task PostAsync(string uri, object data = null, IReadOnlyDictionary headers = null) @@ -66,9 +66,7 @@ public async Task PostAsync(string uri, object data = null, IReadOnlyDicti } var resp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - if (resp.Content == null) return default; - - return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); + return await ReadAndDeserializeAsync(resp); } public async Task DeleteAsync(string uri, IReadOnlyDictionary headers = null) @@ -77,9 +75,7 @@ public async Task DeleteAsync(string uri, IReadOnlyDictionary _client.SendAsync(message)); - if (resp.Content == null) return default; - - return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); + return await ReadAndDeserializeAsync(resp); } public async Task PostFormAsync( string uri, @@ -107,24 +103,27 @@ public async Task PostFormAsync( throw new UnauthorizedException(); } - if (resp.Content == null) - { - return default; - } + return await ReadAndDeserializeAsync(resp); + } - var jsonResponse = await resp.Content.ReadAsStringAsync(); - if (string.IsNullOrWhiteSpace(jsonResponse)) - { - return default; - } + var successResp = await ExecuteHttpMethod(() => _client.SendAsync(message)); + return await ReadAndDeserializeAsync(successResp); + } - return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); + private static async Task ReadAndDeserializeAsync(HttpResponseMessage response) + { + if (response?.Content == null) + { + return default; } - var successResp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - if (successResp.Content == null) return default; + var json = await response.Content.ReadAsStringAsync(); + if (string.IsNullOrWhiteSpace(json)) + { + return default; + } - return await _jsonDataSerializer.DeserializeAsync(successResp.Content, "Response from API"); + return JsonConvert.DeserializeObject(json, SerializingSettings.JsonSerializerSettings); } private async Task ExecuteHttpMethod(Func> method) diff --git a/Integrations/MultifactorIdpApi/MultifactorIdpApi.cs b/Integrations/MultifactorIdpApi/MultifactorIdpApi.cs index fe524c1..246c760 100644 --- a/Integrations/MultifactorIdpApi/MultifactorIdpApi.cs +++ b/Integrations/MultifactorIdpApi/MultifactorIdpApi.cs @@ -3,6 +3,7 @@ using MultiFactor.SelfService.Windows.Portal.Integrations.MultiFactorApi.Dto; using MultiFactor.SelfService.Windows.Portal.Integrations.MultiFactorApi.Exceptions; using MultiFactor.SelfService.Windows.Portal.Integrations.MultiFactorIdpApi.Dto; +using Serilog; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; @@ -50,7 +51,8 @@ public async Task LoginAsync(LoginRequestDto request, Dictiona } catch (Exception ex) { - return LoginResponseDto.Failed(ex.Message); + Log.Logger.Error(ex, "IDP LoginAsync failed"); + return LoginResponseDto.Failed(ex.ToString()); } } @@ -81,7 +83,8 @@ public async Task IdentityAsync(IdentityRequestDto request, } catch (Exception ex) { - return IdentityResponseDto.Failed(ex.Message); + Log.Logger.Error(ex, "IDP IdentityAsync failed"); + return IdentityResponseDto.Failed(ex.ToString()); } } From d4445441972bfbeb61d09e13e12d7539626e619c Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 16:39:09 +0300 Subject: [PATCH 05/14] try fix content problem --- Core/Http/HttpClientAdapter.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 1f89fab..e7970c3 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -130,11 +130,13 @@ private async Task ExecuteHttpMethod(Func ExecuteHttpMethod(Func Date: Wed, 24 Jun 2026 17:49:46 +0300 Subject: [PATCH 06/14] set CredentialVerificationResult --- Extensions/SafeHttpContextAccessorExtensions.cs | 5 +++++ Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs | 9 +++++++-- Stories/SignIn/IdentityStory.cs | 2 ++ Stories/SignIn/SignInStory.cs | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Extensions/SafeHttpContextAccessorExtensions.cs b/Extensions/SafeHttpContextAccessorExtensions.cs index 8b9289d..d68c46a 100644 --- a/Extensions/SafeHttpContextAccessorExtensions.cs +++ b/Extensions/SafeHttpContextAccessorExtensions.cs @@ -19,6 +19,11 @@ public static CredentialVerificationResult SafeGetCredVerificationResult(this Sa ?? CredentialVerificationResult.CreateBuilder(false).Build(); } + public static void SafeSetCredVerificationResult(this SafeHttpContextAccessor accessor, CredentialVerificationResult result) + { + accessor.HttpContext.Items[Constants.CredentialVerificationResult] = result; + } + public static ILdapAttributesCache SafeGetLdapAttributes(this SafeHttpContextAccessor accessor) { return accessor.HttpContext.Items[Constants.LoadedLdapAttributes] as ILdapAttributesCache diff --git a/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs b/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs index c859e9a..2411f51 100644 --- a/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs +++ b/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs @@ -30,8 +30,13 @@ public IReadOnlyDictionary GetClaims() return claims; } - claims.Add(MultiFactorClaims.PasswordExpirationDate, - result.PasswordExpirationDate.ToString(CultureInfo.InvariantCulture)); + + if (result.PasswordExpirationDate > DateTime.MinValue + && result.PasswordExpirationDate < DateTime.MaxValue) + { + claims.Add(MultiFactorClaims.PasswordExpirationDate, + result.PasswordExpirationDate.ToString(CultureInfo.InvariantCulture)); + } return claims; } diff --git a/Stories/SignIn/IdentityStory.cs b/Stories/SignIn/IdentityStory.cs index bc7dffd..40c22bf 100644 --- a/Stories/SignIn/IdentityStory.cs +++ b/Stories/SignIn/IdentityStory.cs @@ -92,6 +92,8 @@ public async Task ExecuteAsync(IdentityModel model, Dictionary ExecuteAsync(LoginModel model, Dictionary x.Key, x => x.Value); claims.Add(AuthenticationClaims.AUTHENTICATION_METHODS_REFERENCES, AuthenticationClaims.PASSWORD_METHOD); From 706528b495f82cd93d78ab308e8e15ad654cc5af Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 17:54:59 +0300 Subject: [PATCH 07/14] fix --- Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs b/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs index 2411f51..ff9cd99 100644 --- a/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs +++ b/Stories/SignIn/ClaimsSources/MultiFactorClaimsSource.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Globalization; using MultiFactor.SelfService.Windows.Portal.Core.Authentication.AuthenticationClaims; From 81e28f366727a21addf870f61e2fb996628eaf04 Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 20:31:30 +0300 Subject: [PATCH 08/14] fix datetime culture bug --- Services/TokenValidationService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Services/TokenValidationService.cs b/Services/TokenValidationService.cs index dc83ae8..29f7528 100644 --- a/Services/TokenValidationService.cs +++ b/Services/TokenValidationService.cs @@ -4,6 +4,7 @@ using MultiFactor.SelfService.Windows.Portal.Services.API; using Serilog; using System; +using System.Globalization; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Net; @@ -81,7 +82,14 @@ public bool VerifyToken(string jwt, out Token token) claim.Type == MultiFactorClaims.PasswordExpirationDate); if (_configuration.NotifyOnPasswordExpirationDaysLeft > 0 && passwordExpirationDate?.Value != null) { - token.PasswordExpirationDate = DateTime.Parse(passwordExpirationDate.Value); + if (DateTime.TryParse(passwordExpirationDate.Value, CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsed)) + { + token.PasswordExpirationDate = parsed; + } + else + { + _logger.Warning("Failed to parse passwordExpirationDate claim value '{Value}'", passwordExpirationDate.Value); + } } return true; //token valid From c4297f2755e497255ff5fa537b0cc1862de90312 Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 21:25:59 +0300 Subject: [PATCH 09/14] rollback needed --- Core/Http/HttpClientAdapter.cs | 14 ++++++-------- .../MultifactorIdpApi/MultifactorIdpApi.cs | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index e7970c3..1f89fab 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -130,13 +130,11 @@ private async Task ExecuteHttpMethod(Func ExecuteHttpMethod(Func LoginAsync(LoginRequestDto request, Dictiona catch (Exception ex) { Log.Logger.Error(ex, "IDP LoginAsync failed"); - return LoginResponseDto.Failed(ex.ToString()); + return LoginResponseDto.Failed(ex.Message); } } @@ -84,7 +84,7 @@ public async Task IdentityAsync(IdentityRequestDto request, catch (Exception ex) { Log.Logger.Error(ex, "IDP IdentityAsync failed"); - return IdentityResponseDto.Failed(ex.ToString()); + return IdentityResponseDto.Failed(ex.Message); } } From cdcd9df23d6245d656396cb2c9d9842289c63f9a Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 21:57:11 +0300 Subject: [PATCH 10/14] fix cant access disposed object --- Core/Http/HttpClientAdapter.cs | 53 ++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 1f89fab..1507399 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -1,7 +1,5 @@ using MultiFactor.SelfService.Windows.Portal.Abstractions.Http; -using MultiFactor.SelfService.Windows.Portal.Core; using MultiFactor.SelfService.Windows.Portal.Core.Exceptions; -using Newtonsoft.Json; using Serilog; using System; using System.Collections.Generic; @@ -53,7 +51,9 @@ public async Task GetAsync(string uri, IReadOnlyDictionary HttpClientUtils.AddHeadersIfExist(message, headers); var resp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - return await ReadAndDeserializeAsync(resp); + if (resp.Content == null) return default; + + return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); } public async Task PostAsync(string uri, object data = null, IReadOnlyDictionary headers = null) @@ -66,7 +66,9 @@ public async Task PostAsync(string uri, object data = null, IReadOnlyDicti } var resp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - return await ReadAndDeserializeAsync(resp); + if (resp.Content == null) return default; + + return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); } public async Task DeleteAsync(string uri, IReadOnlyDictionary headers = null) @@ -75,7 +77,9 @@ public async Task DeleteAsync(string uri, IReadOnlyDictionary _client.SendAsync(message)); - return await ReadAndDeserializeAsync(resp); + if (resp.Content == null) return default; + + return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); } public async Task PostFormAsync( string uri, @@ -103,27 +107,24 @@ public async Task PostFormAsync( throw new UnauthorizedException(); } - return await ReadAndDeserializeAsync(resp); - } + if (resp.Content == null) + { + return default; + } - var successResp = await ExecuteHttpMethod(() => _client.SendAsync(message)); - return await ReadAndDeserializeAsync(successResp); - } + var jsonResponse = await resp.Content.ReadAsStringAsync(); + if (string.IsNullOrWhiteSpace(jsonResponse)) + { + return default; + } - private static async Task ReadAndDeserializeAsync(HttpResponseMessage response) - { - if (response?.Content == null) - { - return default; + return await _jsonDataSerializer.DeserializeAsync(resp.Content, "Response from API"); } - var json = await response.Content.ReadAsStringAsync(); - if (string.IsNullOrWhiteSpace(json)) - { - return default; - } + var successResp = await ExecuteHttpMethod(() => _client.SendAsync(message)); + if (successResp.Content == null) return default; - return JsonConvert.DeserializeObject(json, SerializingSettings.JsonSerializerSettings); + return await _jsonDataSerializer.DeserializeAsync(successResp.Content, "Response from API"); } private async Task ExecuteHttpMethod(Func> method) @@ -131,7 +132,15 @@ private async Task ExecuteHttpMethod(Func + { + var resp = await method(); + if (resp.Content != null) + { + await resp.Content.LoadIntoBufferAsync(); + } + return resp; + }); task.Wait(); var response = task.Result; From 8ed7bdf88e66280cee178384888bbe369688f01d Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 22:04:48 +0300 Subject: [PATCH 11/14] try fix disposed exception --- Core/Http/HttpClientAdapter.cs | 36 ++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 1507399..58b5742 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -127,37 +127,35 @@ public async Task PostFormAsync( return await _jsonDataSerializer.DeserializeAsync(successResp.Content, "Response from API"); } - private async Task ExecuteHttpMethod(Func> method) + private Task ExecuteHttpMethod(Func> method) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - // workaround for the .NET 4.6.2 version - var task = Task.Run(async () => + // workaround for the .NET 4.6.2 version: avoids deadlock when called from sync + var result = Task.Run(async () => { var resp = await method(); if (resp.Content != null) { await resp.Content.LoadIntoBufferAsync(); } - return resp; - }); - task.Wait(); - var response = task.Result; + try + { + resp.EnsureSuccessStatusCode(); + return resp; + } + catch (HttpRequestException ex) + { + var content = await HttpClientUtils.TryGetContent(resp); + _logger.Error(ex, "An error occurred while accessing the source. Content: {content:l}. Exception message: {message:l}", content, ex.Message); - try - { - response.EnsureSuccessStatusCode(); - return response; - } - catch (HttpRequestException ex) - { - var content = await HttpClientUtils.TryGetContent(response); - _logger.Error(ex, "An error occurred while accessing the source. Content: {content:l}. Exception message: {message:l}", content, ex.Message); + if (resp.StatusCode == HttpStatusCode.Unauthorized) throw new UnauthorizedException(); + throw; + } + }).GetAwaiter().GetResult(); - if (response.StatusCode == HttpStatusCode.Unauthorized) throw new UnauthorizedException(); - throw; - } + return Task.FromResult(result); } } } From 4559147f44acc35a9fd8461ca3aa3ed3ec33db48 Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Wed, 24 Jun 2026 22:20:13 +0300 Subject: [PATCH 12/14] remove EnsureSuccessStatusCode that dispose content on fail request --- Core/Http/HttpClientAdapter.cs | 43 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 58b5742..1a6125b 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -127,35 +127,34 @@ public async Task PostFormAsync( return await _jsonDataSerializer.DeserializeAsync(successResp.Content, "Response from API"); } - private Task ExecuteHttpMethod(Func> method) + private async Task ExecuteHttpMethod(Func> method) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - // workaround for the .NET 4.6.2 version: avoids deadlock when called from sync - var result = Task.Run(async () => + // workaround for the .NET 4.6.2 version + var task = Task.Run(method); + task.Wait(); + + var response = task.Result; + + if (response.IsSuccessStatusCode) { - var resp = await method(); - if (resp.Content != null) - { - await resp.Content.LoadIntoBufferAsync(); - } + return response; + } - try - { - resp.EnsureSuccessStatusCode(); - return resp; - } - catch (HttpRequestException ex) - { - var content = await HttpClientUtils.TryGetContent(resp); - _logger.Error(ex, "An error occurred while accessing the source. Content: {content:l}. Exception message: {message:l}", content, ex.Message); + // We don't call EnsureSuccessStatusCode here because it disposes Content + // before throwing, which prevents us from reading the body for the log. + // Read body → log → dispose Content (to free the connection) → throw. + var content = await HttpClientUtils.TryGetContent(response); + _logger.Error("An error occurred while accessing the source. Status: {status}. Content: {content:l}", + (int)response.StatusCode, content); - if (resp.StatusCode == HttpStatusCode.Unauthorized) throw new UnauthorizedException(); - throw; - } - }).GetAwaiter().GetResult(); + response.Content?.Dispose(); + + if (response.StatusCode == HttpStatusCode.Unauthorized) throw new UnauthorizedException(); - return Task.FromResult(result); + throw new HttpRequestException( + $"Response status code does not indicate success: {(int)response.StatusCode} ({response.ReasonPhrase})."); } } } From 36d573532406838b4a61260da77c70525e39466e Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Thu, 25 Jun 2026 11:04:10 +0300 Subject: [PATCH 13/14] safe set --- Extensions/SafeHttpContextAccessorExtensions.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Extensions/SafeHttpContextAccessorExtensions.cs b/Extensions/SafeHttpContextAccessorExtensions.cs index d68c46a..b038c0d 100644 --- a/Extensions/SafeHttpContextAccessorExtensions.cs +++ b/Extensions/SafeHttpContextAccessorExtensions.cs @@ -1,3 +1,4 @@ +using System; using MultiFactor.SelfService.Windows.Portal.Core.Http; using MultiFactor.SelfService.Windows.Portal.Integrations.Ldap.CredentialVerification; using MultiFactor.SelfService.Windows.Portal.Core.LdapAttributesCaching; @@ -21,6 +22,11 @@ public static CredentialVerificationResult SafeGetCredVerificationResult(this Sa public static void SafeSetCredVerificationResult(this SafeHttpContextAccessor accessor, CredentialVerificationResult result) { + if (result == null) + { + throw new ArgumentNullException(nameof(result)); + } + accessor.HttpContext.Items[Constants.CredentialVerificationResult] = result; } From 135f53d1d1d1d476ebb343f146f716a1057e667e Mon Sep 17 00:00:00 2001 From: "a.andreev" Date: Thu, 25 Jun 2026 12:46:30 +0300 Subject: [PATCH 14/14] remove comment part --- Core/Http/HttpClientAdapter.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Core/Http/HttpClientAdapter.cs b/Core/Http/HttpClientAdapter.cs index 1a6125b..8a0905f 100644 --- a/Core/Http/HttpClientAdapter.cs +++ b/Core/Http/HttpClientAdapter.cs @@ -143,8 +143,7 @@ private async Task ExecuteHttpMethod(Func