Selaa lähdekoodia

重构 GetIpInfo 方法以接受和验证 IP 参数

引入了 `System.Net` 命名空间。
修改了 `GetIpInfo` 方法,现在该方法接受一个 `ip` 参数。
移除了获取外部 IP 的代码,改为使用传入的 `ip` 参数。
添加了对传入的 `ip` 参数的验证,如果是有效的 IP 地址,则调用 API 获取 IP 信息。
更新了调用 `GetIpInfo` 方法的代码,传入 `remoteIp` 参数。
添加了 `GetIpInfo` 方法的注释,描述了该方法的功能和参数。
LEIYI 2 kuukautta sitten
vanhempi
commit
d8f93184b8
1 muutettua tiedostoa jossa 20 lisäystä ja 11 poistoa
  1. 20 11
      OASystem/OASystem.Api/Middlewares/RecordAPIOperationMiddleware.cs

+ 20 - 11
OASystem/OASystem.Api/Middlewares/RecordAPIOperationMiddleware.cs

@@ -2,6 +2,7 @@
 using OASystem.Domain.Attributes;
 using OASystem.Domain.Entities.Customer;
 using Org.BouncyCastle.Asn1.Pkcs;
+using System.Net;
 using UAParser;
 using static OASystem.API.OAMethodLib.JWTHelper;
 
@@ -163,7 +164,7 @@ namespace OASystem.API.Middlewares
                     remoteIp = context.Connection.RemoteIpAddress?.ToString();
                 }
 
-                //(remoteIp, location) = await GetIpInfo();
+                (remoteIp, location) = await GetIpInfo(remoteIp);
                 //remoteIp = await GetExternalIp();
                 //location = await GetIpLocation(remoteIp);
 
@@ -303,19 +304,27 @@ namespace OASystem.API.Middlewares
 
             return 0;
         }
-
-        private async Task<(string ip, string local)> GetIpInfo()
+        /// <summary>
+        /// 获取IP信息
+        /// </summary>
+        /// <param name="ip">ipv4 or ipv6</param>
+        /// <returns></returns>
+        private async Task<(string ip, string local)> GetIpInfo(string ip)
         {
-            string ip = string.Empty, local = string.Empty;
-            var response = await _httpClient.GetAsync("https://api.vore.top/api/IPdata");
+            string local = string.Empty;
 
-            response.EnsureSuccessStatusCode();
-            var json = await response.Content.ReadAsStringAsync();
-            var ipInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
-            if (ipInfo.code == 200)
+            if (IPAddress.TryParse(ip,out _))
             {
-                ip = ipInfo.ipinfo.text;
-                local = $"{ipInfo.adcode.o}";
+                var response = await _httpClient.GetAsync($"https://api.vore.top/api/IPdata?ip={ip}");
+
+                response.EnsureSuccessStatusCode();
+                var json = await response.Content.ReadAsStringAsync();
+                var ipInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
+                if (ipInfo.code == 200)
+                {
+                    ip = ipInfo.ipinfo.text;
+                    local = $"{ipInfo.adcode.o}";
+                }
             }
 
             return (ip, local);