diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs index 9208357d4a..6b23857233 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs @@ -1,5 +1,7 @@ using System.Text; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Cli.Commands; +using Volo.Abp.Cli.Http; using Volo.Abp.Domain; using Volo.Abp.IdentityModel; using Volo.Abp.Json; @@ -18,6 +20,9 @@ namespace Volo.Abp.Cli { public override void ConfigureServices(ServiceConfigurationContext context) { + context.Services.AddHttpClient(CliConsts.HttpClientName) + .ConfigurePrimaryHttpMessageHandler(() => new CliHttpClientHandler()); + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Configure(options => diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs index b062388c7a..37dbbba318 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs @@ -7,5 +7,7 @@ public const string BranchPrefix = "branch@"; public const string DocsLink = "https://docs.abp.io"; + + public const string HttpClientName = "AbpHttpClient"; } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs similarity index 74% rename from framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs rename to framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs index 5aaf2ae2d3..9976542f05 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs @@ -13,29 +13,9 @@ using Microsoft.Extensions.Logging; namespace Volo.Abp.Cli.Http { - public class CliHttpClient : HttpClient + public static class CliHttpClientExtensions { - public static TimeSpan DefaultTimeout { get; set; } = TimeSpan.FromMinutes(1); - - public CliHttpClient(TimeSpan? timeout = null) - : base(new CliHttpClientHandler()) - { - Timeout = timeout ?? DefaultTimeout; - - AddAuthentication(); - } - - public CliHttpClient(bool setBearerToken) : base(new CliHttpClientHandler()) - { - Timeout = DefaultTimeout; - - if (setBearerToken) - { - AddAuthentication(); - } - } - - public void AddAuthentication() + public static void AddAbpAuthenticationToken(this HttpClient httpClient) { if (!AuthService.IsLoggedIn()) { @@ -45,12 +25,13 @@ namespace Volo.Abp.Cli.Http var accessToken = File.ReadAllText(CliPaths.AccessToken, Encoding.UTF8); if (!accessToken.IsNullOrEmpty()) { - this.SetBearerToken(accessToken); + httpClient.SetBearerToken(accessToken); } } - public async Task GetHttpResponseMessageWithRetryAsync + public static async Task GetHttpResponseMessageWithRetryAsync ( + this HttpClient httpClient, string url, CancellationToken? cancellationToken = null, ILogger logger = null, @@ -70,7 +51,7 @@ namespace Volo.Abp.Cli.Http if (cancellationToken == null) { var cancellationTokenSource = new CancellationTokenSource(); - cancellationTokenSource.CancelAfter(DefaultTimeout); + cancellationTokenSource.CancelAfter(httpClient.Timeout); cancellationToken = cancellationTokenSource.Token; } @@ -97,9 +78,7 @@ namespace Volo.Abp.Cli.Http $"Waiting {timeSpan.TotalSeconds} secs for the next try..."); } }) - .ExecuteAsync(async () => await this.GetAsync(url, cancellationToken.Value)); + .ExecuteAsync(async () => await httpClient.GetAsync(url, cancellationToken.Value)); } - - } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs index b509a1614d..a5608a1f88 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs @@ -1,29 +1,35 @@ using System; +using System.Net.Http; using System.Threading; using Volo.Abp.DependencyInjection; using Volo.Abp.Threading; namespace Volo.Abp.Cli.Http { - public class CliHttpClientFactory : ISingletonDependency, IDisposable + public class CliHttpClientFactory : ISingletonDependency { - private static CliHttpClient _authenticatedHttpClient; - private static CliHttpClient _unauthenticatedHttpClient; + public static readonly TimeSpan DefaultTimeout = TimeSpan.FromMinutes(1); + + private readonly IHttpClientFactory _clientFactory; private readonly ICancellationTokenProvider _cancellationTokenProvider; - public CliHttpClientFactory(ICancellationTokenProvider cancellationTokenProvider) + public CliHttpClientFactory(IHttpClientFactory clientFactory, ICancellationTokenProvider cancellationTokenProvider) { + _clientFactory = clientFactory; _cancellationTokenProvider = cancellationTokenProvider; } - public CliHttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null) + public HttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null) { + var httpClient = _clientFactory.CreateClient(CliConsts.HttpClientName); + httpClient.Timeout = timeout ?? DefaultTimeout; + if (needsAuthentication) { - return CreateAuthenticatedHttpClient(timeout); + httpClient.AddAbpAuthenticationToken(); } - return CreateUnAuthenticatedHttpClient(timeout); + return httpClient; } public CancellationToken GetCancellationToken(TimeSpan? timeout = null) @@ -33,7 +39,7 @@ namespace Volo.Abp.Cli.Http if (_cancellationTokenProvider == null) { var cancellationTokenSource = new CancellationTokenSource(); - cancellationTokenSource.CancelAfter(CliHttpClient.DefaultTimeout); + cancellationTokenSource.CancelAfter(DefaultTimeout); return cancellationTokenSource.Token; } else @@ -48,37 +54,5 @@ namespace Volo.Abp.Cli.Http return cancellationTokenSource.Token; } } - - private static CliHttpClient CreateAuthenticatedHttpClient(TimeSpan? timeout = null) - { - if (_authenticatedHttpClient == null) - { - _authenticatedHttpClient = new CliHttpClient(setBearerToken: true) - { - Timeout = System.Threading.Timeout.InfiniteTimeSpan - }; - } - - return _authenticatedHttpClient; - } - - private static CliHttpClient CreateUnAuthenticatedHttpClient(TimeSpan? timeout = null) - { - if (_unauthenticatedHttpClient == null) - { - _unauthenticatedHttpClient = new CliHttpClient(setBearerToken: false) - { - Timeout = System.Threading.Timeout.InfiniteTimeSpan - }; - } - - return _unauthenticatedHttpClient; - } - - public void Dispose() - { - _authenticatedHttpClient?.Dispose(); - _unauthenticatedHttpClient?.Dispose(); - } } -} \ No newline at end of file +}