From db2e4da536330f3dd049a10bd04d98d7de83af0d Mon Sep 17 00:00:00 2001 From: Poornachandra M Date: Thu, 15 Feb 2024 17:57:19 +0530 Subject: [PATCH 1/2] :zap: perf(cancellationToken): Use of CancellationToken in Http requests --- src/Web/HealthChecks/ApiHealthCheck.cs | 6 +++--- src/Web/HealthChecks/HomePageHealthCheck.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Web/HealthChecks/ApiHealthCheck.cs b/src/Web/HealthChecks/ApiHealthCheck.cs index 49f6634e5..ad9a5106c 100644 --- a/src/Web/HealthChecks/ApiHealthCheck.cs +++ b/src/Web/HealthChecks/ApiHealthCheck.cs @@ -18,12 +18,12 @@ public ApiHealthCheck(IOptions baseUrlConfiguration) public async Task CheckHealthAsync( HealthCheckContext context, - CancellationToken cancellationToken = default(CancellationToken)) + CancellationToken cancellationToken = default) { string myUrl = _baseUrlConfiguration.ApiBase + "catalog-items"; var client = new HttpClient(); - var response = await client.GetAsync(myUrl); - var pageContents = await response.Content.ReadAsStringAsync(); + var response = await client.GetAsync(myUrl, cancellationToken); + var pageContents = await response.Content.ReadAsStringAsync(cancellationToken); if (pageContents.Contains(".NET Bot Black Sweatshirt")) { return HealthCheckResult.Healthy("The check indicates a healthy result."); diff --git a/src/Web/HealthChecks/HomePageHealthCheck.cs b/src/Web/HealthChecks/HomePageHealthCheck.cs index 0896954db..408519612 100644 --- a/src/Web/HealthChecks/HomePageHealthCheck.cs +++ b/src/Web/HealthChecks/HomePageHealthCheck.cs @@ -17,14 +17,14 @@ public HomePageHealthCheck(IHttpContextAccessor httpContextAccessor) public async Task CheckHealthAsync( HealthCheckContext context, - CancellationToken cancellationToken = default(CancellationToken)) + CancellationToken cancellationToken = default) { var request = _httpContextAccessor.HttpContext?.Request; string myUrl = request?.Scheme + "://" + request?.Host.ToString(); var client = new HttpClient(); - var response = await client.GetAsync(myUrl); - var pageContents = await response.Content.ReadAsStringAsync(); + var response = await client.GetAsync(myUrl, cancellationToken); + var pageContents = await response.Content.ReadAsStringAsync(cancellationToken); if (pageContents.Contains(".NET Bot Black Sweatshirt")) { return HealthCheckResult.Healthy("The check indicates a healthy result."); From 5ffccf8496fabe4a548482fa22c135f4b144de61 Mon Sep 17 00:00:00 2001 From: Poornachandra M Date: Thu, 15 Feb 2024 21:47:07 +0530 Subject: [PATCH 2/2] :zap: perf(IHttpClientFactory): Using IHttpClientFactory along with primary constructors --- src/Web/HealthChecks/ApiHealthCheck.cs | 23 +++++++-------------- src/Web/HealthChecks/HomePageHealthCheck.cs | 20 ++++++------------ src/Web/Program.cs | 7 +++---- 3 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/Web/HealthChecks/ApiHealthCheck.cs b/src/Web/HealthChecks/ApiHealthCheck.cs index ad9a5106c..58c55d993 100644 --- a/src/Web/HealthChecks/ApiHealthCheck.cs +++ b/src/Web/HealthChecks/ApiHealthCheck.cs @@ -1,28 +1,19 @@ -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using BlazorShared; +using BlazorShared; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Options; namespace Microsoft.eShopWeb.Web.HealthChecks; -public class ApiHealthCheck : IHealthCheck +public class ApiHealthCheck(IOptions baseUrlConfiguration, IHttpClientFactory httpClientFactory) : IHealthCheck { - private readonly BaseUrlConfiguration _baseUrlConfiguration; + private readonly BaseUrlConfiguration _baseUrlConfiguration = baseUrlConfiguration.Value; + private HttpClient? _httpClient; - public ApiHealthCheck(IOptions baseUrlConfiguration) - { - _baseUrlConfiguration = baseUrlConfiguration.Value; - } - - public async Task CheckHealthAsync( - HealthCheckContext context, - CancellationToken cancellationToken = default) + public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { + _httpClient = httpClientFactory.CreateClient(); string myUrl = _baseUrlConfiguration.ApiBase + "catalog-items"; - var client = new HttpClient(); - var response = await client.GetAsync(myUrl, cancellationToken); + var response = await _httpClient.GetAsync(myUrl, cancellationToken); var pageContents = await response.Content.ReadAsStringAsync(cancellationToken); if (pageContents.Contains(".NET Bot Black Sweatshirt")) { diff --git a/src/Web/HealthChecks/HomePageHealthCheck.cs b/src/Web/HealthChecks/HomePageHealthCheck.cs index 408519612..1cf31932e 100644 --- a/src/Web/HealthChecks/HomePageHealthCheck.cs +++ b/src/Web/HealthChecks/HomePageHealthCheck.cs @@ -6,24 +6,16 @@ namespace Microsoft.eShopWeb.Web.HealthChecks; -public class HomePageHealthCheck : IHealthCheck +public class HomePageHealthCheck(IHttpContextAccessor httpContextAccessor, IHttpClientFactory httpClientFactory) : IHealthCheck { - private readonly IHttpContextAccessor _httpContextAccessor; + private HttpClient? _httpClient; - public HomePageHealthCheck(IHttpContextAccessor httpContextAccessor) + public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { - _httpContextAccessor = httpContextAccessor; - } - - public async Task CheckHealthAsync( - HealthCheckContext context, - CancellationToken cancellationToken = default) - { - var request = _httpContextAccessor.HttpContext?.Request; + _httpClient = httpClientFactory.CreateClient(); + var request = httpContextAccessor.HttpContext?.Request; string myUrl = request?.Scheme + "://" + request?.Host.ToString(); - - var client = new HttpClient(); - var response = await client.GetAsync(myUrl, cancellationToken); + var response = await _httpClient.GetAsync(myUrl, cancellationToken); var pageContents = await response.Content.ReadAsStringAsync(cancellationToken); if (pageContents.Contains(".NET Bot Black Sweatshirt")) { diff --git a/src/Web/Program.cs b/src/Web/Program.cs index 9761361dd..34606a66f 100644 --- a/src/Web/Program.cs +++ b/src/Web/Program.cs @@ -99,10 +99,9 @@ var baseUrlConfig = configSection.Get(); // Blazor Admin Required Services for Prerendering -builder.Services.AddScoped(s => new HttpClient -{ - BaseAddress = new Uri(baseUrlConfig!.WebBase) -}); + +builder.Services.AddHttpClient(); + // add blazor services builder.Services.AddBlazoredLocalStorage();