Browse Source

Use ms IHttpClientFactory to create http client.

pull/7625/head
maliming 6 years ago
parent
commit
4ccf716580
  1. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
  3. 35
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs
  4. 56
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs

5
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<AbpCliOptions>(options =>

2
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";
}
}

35
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs → 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<HttpResponseMessage> GetHttpResponseMessageWithRetryAsync<T>
public static async Task<HttpResponseMessage> GetHttpResponseMessageWithRetryAsync<T>
(
this HttpClient httpClient,
string url,
CancellationToken? cancellationToken = null,
ILogger<T> 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));
}
}
}

56
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();
}
}
}
}

Loading…
Cancel
Save