huangxiaoqiang
9 小时以前 16749e23b489ee24f993fe9e87346680b7bcf63a
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/HttpHelper.cs
@@ -4,12 +4,15 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Reflection.Metadata;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.LogHelper;
namespace WIDESEAWCS_Core.Helper
{
    public class HttpHelper
    {
        public static async Task<string> GetAsync(string serviceAddress, Dictionary<string, object> parameters, string contentType = "application/json", Dictionary<string, string>? headers = null)
@@ -47,36 +50,38 @@
        {
            try
            {
                if (serviceAddress.Contains("http://c24-cellmi3:12020"))
                {
                    // å°† JSON å­—符串转换为字典
                    var parameters = JsonConvert.DeserializeObject<Dictionary<string, object>>(requestJson);
                //if (serviceAddress.Contains("http://c24-cellmi3:12020"))
                //{
                //    // å°† JSON å­—符串转换为字典
                //    var parameters = JsonConvert.DeserializeObject<Dictionary<string, object>>(requestJson);
                    // åˆ›å»ºä¸€ä¸ªæ–°çš„字典,排除 RequestTime å’Œ SessionId
                    var filteredParameters = parameters.Where(p => p.Key != "RequestTime" && p.Key != "SessionId").ToDictionary(p => p.Key, p => p.Value);
                //    // åˆ›å»ºä¸€ä¸ªæ–°çš„字典,排除 RequestTime å’Œ SessionId
                //    var filteredParameters = parameters.Where(p => p.Key != "RequestTime" && p.Key != "SessionId").ToDictionary(p => p.Key, p => p.Value);
                    string requestKey = $"{serviceAddress}:{JsonConvert.SerializeObject(filteredParameters)}";
                //    string requestKey = $"{serviceAddress}:{JsonConvert.SerializeObject(filteredParameters)}";
                    // æ£€æŸ¥è¯·æ±‚次数和时间限制
                    if (requestTracker.TryGetValue(requestKey, out var requestInfo))
                    {
                        if (requestInfo.Count >= 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(3))
                        {
                            // å¦‚果请求次数超过限制且未超过10分钟,抛出异常
                            throw new InvalidOperationException("请求次数已达到限制,请稍后再试。");
                        }
                    }
                //    // æ£€æŸ¥è¯·æ±‚次数和时间限制
                //    if (requestTracker.TryGetValue(requestKey, out var requestInfo))
                //    {
                //        if (requestInfo.Count >= 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(3))
                //        {
                //            // å¦‚果请求次数超过限制且未超过10分钟,抛出异常
                //            throw new InvalidOperationException("请求次数已达到限制,请稍后再试。");
                //        }
                //    }
                    // æ›´æ–°è¯·æ±‚跟踪信息
                    if (requestTracker.ContainsKey(requestKey))
                    {
                        requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now);
                    }
                    else
                    {
                        requestTracker[requestKey] = (1, DateTime.Now);
                    }
                }
                //    // æ›´æ–°è¯·æ±‚跟踪信息
                //    if (requestTracker.ContainsKey(requestKey))
                //    {
                //        requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now);
                //    }
                //    else
                //    {
                //        requestTracker[requestKey] = (1, DateTime.Now);
                //    }
                //}
                LogRequestParameters(requestJson, serviceAddress);
                string result = string.Empty;
                using (HttpContent httpContent = new StringContent(requestJson))
                {
@@ -91,11 +96,14 @@
                    }
                    result = await httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync();
                }
                LogResponseParameters(result, serviceAddress);
                return result;
            }
            catch (Exception e)
            catch (Exception ex)
            {
                Console.WriteLine(e.Message);
                LogErrorParameters(ex.StackTrace, ex.Message, serviceAddress);
                Console.WriteLine(ex.Message);
            }
            return null;
        }
@@ -145,5 +153,37 @@
            }
            return null;
        }
        private static void LogErrorParameters(string errordetail, string error, string url = "")
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(Environment.NewLine);
            builder.Append("---------------------------------------------");
            builder.Append(Environment.NewLine);
            builder.Append("url:" + url + "异常详细信息: " + JsonConvert.SerializeObject(error));
            builder.Append("url:" + url + "异常信息: " + JsonConvert.SerializeObject(error));
            LogAPI.WriteInfo($"API接口", $"{builder}");
        }
        private static void LogRequestParameters(string parameters, string url = "")
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(Environment.NewLine);
            builder.Append("---------------------------------------------");
            builder.Append(Environment.NewLine);
            builder.Append("url:" + url + "请求参数: " + JsonConvert.SerializeObject(parameters));
            LogAPI.WriteInfo($"API接口", $"{builder}");
        }
        private static void LogResponseParameters(string responseBody, string url = "")
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(Environment.NewLine);
            builder.Append("url:" + url + "响应参数: " + responseBody);
            builder.Append(Environment.NewLine);
            builder.Append("---------------------------------------------");
            builder.Append(Environment.NewLine);
            LogAPI.WriteInfo($"API接口", $"{builder}");
        }
    }
}