Selaa lähdekoodia

强制使用自身反向代理进行升级检测

陈国伟 4 vuotta sitten
vanhempi
commit
e8a3c5eb84

+ 10 - 6
FastGithub.Upgrade/FastGithub.Upgrade.csproj

@@ -1,11 +1,15 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
-	<PropertyGroup>
-		<TargetFramework>net5.0</TargetFramework>
-	</PropertyGroup>
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+  </PropertyGroup>
 
-	<ItemGroup>
-		<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
-	</ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\FastGithub.Core\FastGithub.Core.csproj" />
+  </ItemGroup>
 
 </Project>

+ 43 - 0
FastGithub.Upgrade/ReverseProxyHttpHandler.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Net;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace FastGithub.Upgrade
+{
+    /// <summary>
+    /// 本机反向代理的httpHandler
+    /// </summary>
+    sealed class ReverseProxyHttpHandler : DelegatingHandler
+    {
+        /// <summary>
+        /// 本机反向代理的httpHandler
+        /// </summary>
+        public ReverseProxyHttpHandler()
+        {
+            this.InnerHandler = new HttpClientHandler();
+        }
+
+        /// <summary>
+        /// 替换为Loopback
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
+        {
+            var uri = request.RequestUri;
+            if (uri != null && uri.HostNameType == UriHostNameType.Dns)
+            {
+                var domain = uri.Host;
+                var builder = new UriBuilder(uri) { Host = IPAddress.Loopback.ToString() };
+
+                request.RequestUri = builder.Uri;
+                request.Headers.Host = domain;
+            }
+
+            return await base.SendAsync(request, cancellationToken);
+        }
+    }
+}

+ 1 - 1
FastGithub.Upgrade/UpgradeHostedService.cs

@@ -33,7 +33,7 @@ namespace FastGithub.Upgrade
         /// <returns></returns>
         protected override async Task ExecuteAsync(CancellationToken stoppingToken)
         {
-            var maxTryCount = 3;
+            var maxTryCount = 5;
             for (var i = 1; i <= maxTryCount; i++)
             {
                 try

+ 4 - 1
FastGithub.Upgrade/UpgradeService.cs

@@ -59,7 +59,10 @@ namespace FastGithub.Upgrade
         /// <returns></returns>
         public async Task<GithubRelease?> GetLastedReleaseAsync(CancellationToken cancellationToken)
         {
-            using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30d) };
+            using var httpClient = new HttpClient(new ReverseProxyHttpHandler())
+            {
+                Timeout = TimeSpan.FromSeconds(30d),
+            };
             httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
             httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(nameof(FastGithub), "1.0"));