Skip to content

Commit fe86291

Browse files
author
agile.zhou
committed
Use build-in httpclient instead of AgileHttp;
1 parent 435687d commit fe86291

File tree

14 files changed

+261
-141
lines changed

14 files changed

+261
-141
lines changed

src/AgileConfig.Server.Apisite/Startup.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using System;
22
using System.IO;
33
using System.Net;
4+
using System.Net.Http;
45
using System.Text;
56
using AgileConfig.Server.Apisite.UIExtension;
67
using AgileConfig.Server.Apisite.Websocket;
78
using AgileConfig.Server.Common;
9+
using AgileConfig.Server.Common.RestClient;
810
using AgileConfig.Server.Data.Freesql;
911
using AgileConfig.Server.OIDC;
1012
using AgileConfig.Server.Service;
@@ -27,13 +29,23 @@ public Startup(IConfiguration configuration, ILoggerFactory loggerFactory)
2729
Configuration = configuration;
2830
Global.LoggerFactory = loggerFactory;
2931

30-
TrustSSL(configuration);
32+
SetTrustSSL(configuration);
3133
}
3234

33-
private void TrustSSL(IConfiguration configuration)
35+
private static bool IsTrustSSL(IConfiguration configuration)
3436
{
3537
var alwaysTrustSsl = configuration["alwaysTrustSsl"];
3638
if (!string.IsNullOrEmpty(alwaysTrustSsl) && alwaysTrustSsl.ToLower() == "true")
39+
{
40+
return true;
41+
}
42+
43+
return false;
44+
}
45+
46+
private static void SetTrustSSL(IConfiguration configuration)
47+
{
48+
if (IsTrustSSL(configuration))
3749
{
3850
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
3951
}
@@ -47,6 +59,9 @@ public IConfiguration Configuration
4759
// This method gets called by the runtime. Use this method to add services to the container.
4860
public void ConfigureServices(IServiceCollection services)
4961
{
62+
services.AddDefaultHttpClient(IsTrustSSL(Configuration));
63+
services.AddRestClient();
64+
5065
var jwtService = new JwtService();
5166
services.AddMemoryCache();
5267
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
@@ -71,6 +86,7 @@ public void ConfigureServices(IServiceCollection services)
7186
services.AddBusinessServices();
7287
services.AddHostedService<InitService>();
7388
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
89+
7490
services.AddOIDC();
7591
}
7692

@@ -138,5 +154,7 @@ private void AddSwaggerMiddleWare(IApplicationBuilder app)
138154
c.SwaggerEndpoint("v1/swagger.json", "My API V1");
139155
});
140156
}
157+
158+
141159
}
142160
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using AgileConfig.Server.Common;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using System.Net.Http;
4+
5+
namespace AgileConfig.Server.Apisite
6+
{
7+
public static class StartupExtension
8+
{
9+
public static void AddDefaultHttpClient(this IServiceCollection services, bool isTrustSSL)
10+
{
11+
services.AddHttpClient(Global.DefaultHttpClientName)
12+
.ConfigurePrimaryHttpMessageHandler(() => {
13+
return NewMessageHandler(isTrustSSL);
14+
})
15+
;
16+
}
17+
18+
static HttpMessageHandler NewMessageHandler(bool alwaysTrustSsl)
19+
{
20+
var handler = new HttpClientHandler();
21+
if (alwaysTrustSsl)
22+
{
23+
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
24+
{
25+
return true;
26+
};
27+
}
28+
29+
return handler;
30+
}
31+
}
32+
}

src/AgileConfig.Server.Common/Global.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,7 @@ public static ILoggerFactory LoggerFactory
2424
_loggerFactory = value;
2525
}
2626
}
27+
28+
public const string DefaultHttpClientName = "Default";
2729
}
2830
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net.Http;
4+
using System.Threading.Tasks;
5+
6+
namespace AgileConfig.Server.Common.RestClient
7+
{
8+
public class DefaultRestClient : IRestClient
9+
{
10+
private readonly IHttpClientFactory _httpClientFactory;
11+
12+
public DefaultRestClient(
13+
IHttpClientFactory httpClientFactory
14+
)
15+
{
16+
this._httpClientFactory = httpClientFactory;
17+
}
18+
19+
private HttpClient GetDefaultClient()
20+
{
21+
return _httpClientFactory.CreateClient(Global.DefaultHttpClientName);
22+
}
23+
24+
public async Task<T> GetAsync<T>(string url, Dictionary<string, string> headers = null)
25+
{
26+
using var resp = await GetAsync(url, headers);
27+
resp.EnsureSuccessStatusCode();
28+
29+
var json = await resp.Content.ReadAsStringAsync();
30+
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
31+
}
32+
33+
public async Task<T> PostAsync<T>(string url, object data, Dictionary<string, string> headers = null)
34+
{
35+
using var resp = await PostAsync(url, data, headers);
36+
37+
resp.EnsureSuccessStatusCode();
38+
39+
var json = await resp.Content.ReadAsStringAsync();
40+
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
41+
}
42+
43+
public async Task<HttpResponseMessage> PostAsync(string url, object data, Dictionary<string, string> headers = null)
44+
{
45+
var httpclient = GetDefaultClient();
46+
if (headers != null)
47+
{
48+
foreach (var header in headers)
49+
{
50+
httpclient.DefaultRequestHeaders.Add(header.Key, header.Value);
51+
}
52+
}
53+
54+
var jsondata = "";
55+
if (data != null)
56+
{
57+
jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(data);
58+
}
59+
var stringContent = new StringContent(jsondata,
60+
new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
61+
62+
var resp = await httpclient.PostAsync(url, stringContent);
63+
64+
return resp;
65+
}
66+
67+
public async Task<HttpResponseMessage> GetAsync(string url, Dictionary<string, string> headers = null)
68+
{
69+
var httpclient = GetDefaultClient();
70+
if (headers != null)
71+
{
72+
foreach (var header in headers)
73+
{
74+
httpclient.DefaultRequestHeaders.Add(header.Key, header.Value);
75+
}
76+
}
77+
var resp = await httpclient.GetAsync(url);
78+
79+
return resp;
80+
}
81+
}
82+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Collections.Generic;
2+
using System.Net.Http;
3+
using System.Threading.Tasks;
4+
5+
namespace AgileConfig.Server.Common.RestClient
6+
{
7+
public interface IRestClient
8+
{
9+
Task<T> GetAsync<T>(string url, Dictionary<string, string> headers = null);
10+
11+
Task<HttpResponseMessage> GetAsync(string url, Dictionary<string, string> headers = null);
12+
13+
Task<T> PostAsync<T>(string url, object data, Dictionary<string, string> headers = null);
14+
15+
Task<HttpResponseMessage> PostAsync(string url, object data, Dictionary<string, string> headers = null);
16+
17+
}
18+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
3+
namespace AgileConfig.Server.Common.RestClient
4+
{
5+
public static class ServiceCollectionEx
6+
{
7+
public static void AddRestClient(this IServiceCollection sc)
8+
{
9+
sc.AddScoped<IRestClient, DefaultRestClient>();
10+
}
11+
}
12+
}

src/AgileConfig.Server.IService/IRegisterCenterService.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
using AgileConfig.Server.Data.Entity;
2-
using System;
3-
using System.Collections.Generic;
4-
using System.Linq;
5-
using System.Text;
62
using System.Threading.Tasks;
73

84
namespace AgileConfig.Server.IService

src/AgileConfig.Server.OIDC/OidcClient.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using AgileConfig.Server.OIDC.SettingProvider;
1+
using AgileConfig.Server.Common;
2+
using AgileConfig.Server.OIDC.SettingProvider;
23
using AgileConfig.Server.OIDC.TokenEndpointAuthMethods;
34
using Newtonsoft.Json;
45
using System.IdentityModel.Tokens.Jwt;
@@ -10,11 +11,13 @@ public class OidcClient : IOidcClient
1011
{
1112
private readonly IOidcSettingProvider _oidcSettingProvider;
1213
private readonly OidcSetting _oidcSetting;
14+
private readonly IHttpClientFactory _httpClientFactory;
1315

1416
public OidcSetting OidcSetting => _oidcSetting;
1517

16-
public OidcClient(IOidcSettingProvider oidcSettingProvider)
18+
public OidcClient(IOidcSettingProvider oidcSettingProvider, IHttpClientFactory httpClientFactory)
1719
{
20+
_httpClientFactory = httpClientFactory;
1821
_oidcSettingProvider = oidcSettingProvider;
1922
_oidcSetting = _oidcSettingProvider.GetSetting();
2023
}
@@ -35,7 +38,8 @@ public string GetAuthorizeUrl()
3538
var authMethod = TokenEndpointAuthMethodFactory.Create(_oidcSetting.TokenEndpointAuthMethod);
3639
var httpContent = authMethod.GetAuthHttpContent(code, _oidcSetting);
3740

38-
using var httpclient = new HttpClient();
41+
42+
var httpclient = _httpClientFactory.CreateClient(Global.DefaultHttpClientName);
3943
if (!string.IsNullOrEmpty(httpContent.BasicAuthorizationString))
4044
{
4145
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", httpContent.BasicAuthorizationString);

src/AgileConfig.Server.Service/AgileConfig.Server.Service.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44
<TargetFramework>net8.0</TargetFramework>
55
</PropertyGroup>
66

7-
<ItemGroup>
8-
<PackageReference Include="AgileHttp" Version="0.0.6" />
9-
</ItemGroup>
10-
117
<ItemGroup>
128
<ProjectReference Include="..\AgileConfig.Server.Common\AgileConfig.Server.Common.csproj" />
139
<ProjectReference Include="..\AgileConfig.Server.Data.Freesql\AgileConfig.Server.Data.Freesql.csproj" />

src/AgileConfig.Server.Service/EventRegisterService/EventRegister.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using AgileConfig.Server.IService;
1+
using AgileConfig.Server.Common.RestClient;
2+
using AgileConfig.Server.IService;
23
using Microsoft.Extensions.Logging;
34

45
namespace AgileConfig.Server.Service.EventRegisterService;
@@ -10,12 +11,12 @@ public class EventRegister : IEventRegister
1011
private readonly SysLogRegister _sysLogRegister;
1112
private readonly ServiceInfoStatusUpdateRegister _serviceInfoStatusUpdateRegister;
1213

13-
public EventRegister(IRemoteServerNodeProxy remoteServerNodeProxy, ILoggerFactory loggerFactory)
14+
public EventRegister(IRemoteServerNodeProxy remoteServerNodeProxy, ILoggerFactory loggerFactory, IRestClient restClient)
1415
{
1516
_remoteServerNodeProxy = remoteServerNodeProxy;
1617
_configStatusUpdateRegister = new ConfigStatusUpdateRegister(_remoteServerNodeProxy);
1718
_sysLogRegister = new SysLogRegister();
18-
_serviceInfoStatusUpdateRegister = new ServiceInfoStatusUpdateRegister(_remoteServerNodeProxy, loggerFactory);
19+
_serviceInfoStatusUpdateRegister = new ServiceInfoStatusUpdateRegister(_remoteServerNodeProxy, loggerFactory, restClient);
1920
}
2021

2122
public void Register()

0 commit comments

Comments
 (0)