1
huangxiaoqiang
2025-04-09 b8cd98f0a2d8a7e644563eb67d4c88371279a729
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Common/HttpClient/HttpsClient.cs
@@ -42,9 +42,36 @@
        }
    }
    // 用于追踪每个请求的调用次数和最后请求时间。
    private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new();
    // 封装一个用HttpClient发送Post请求的方法有参数
    public static async Task<string> PostAsync(string url, Dictionary<string, object> parameters)
    {
        // 创建一个新的字典,排除 RequestTime 和 SessionId
        var filteredParameters = parameters.Where(p => p.Key != "RequestTime"&& p.Key != "SessionId").ToDictionary(p => p.Key, p => p.Value);
        string requestKey = $"{url}:{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.ContainsKey(requestKey))
        {
            requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now);
        }
        else
        {
            requestTracker[requestKey] = (1, DateTime.Now);
        }
        // 记录请求参数
        LogRequestParameters(parameters, url);
@@ -78,7 +105,7 @@
        }
    }
    private static void LogRequestParameters(Dictionary<string, object> parameters,string url = "")
    private static void LogRequestParameters(Dictionary<string, object> parameters, string url = "")
    {
        StringBuilder builder = new StringBuilder();
        builder.Append(Environment.NewLine);