123
wanshenmean
2025-04-16 bcf9bb239b20aad23a0f4dfe8074b6fdf69f0a37
123
已修改1个文件
已添加2个文件
37 ■■■■ 文件已修改
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/HttpClient/HttpsClient.cs 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/前段线体点位图/08三楼输送布局点位图1107.DWG.lck 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/前段线体点位图/08三楼输送布局点位图1107.dwg.bak 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/HttpClient/HttpsClient.cs
@@ -5,11 +5,24 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using Timer = System.Timers.Timer;
namespace WIDESEA_Common;
public class HttpsClient
{
    private static readonly Timer cleanupTimer;
    static HttpsClient()
    {
        // è®¾ç½®å®šæ—¶å™¨ï¼Œæ¯10分钟清理一次requestTracker的数据
        cleanupTimer = new Timer(10 * 60 * 1000);
        cleanupTimer.Elapsed += CleanupRequestTracker;
        cleanupTimer.AutoReset = true;
        cleanupTimer.Enabled = true;
    }
    private static readonly LogFactory LogFactory = new LogFactory();
    // å°è£…一个用HttpClient发送GET请求的方法有参数
@@ -44,23 +57,24 @@
    // ç”¨äºŽè¿½è¸ªæ¯ä¸ªè¯·æ±‚的调用次数和最后请求时间。
    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);
        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(10))
            if (requestInfo.Count >= 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(5))
            {
                // å¦‚果请求次数超过限制且未超过10分钟,抛出异常
                Console.WriteLine("请求次数已达到限制,请稍后再试。");
                Console.WriteLine($"接口地址:{url}");
                Console.WriteLine($"请求数据:{JsonConvert.SerializeObject(filteredParameters, Formatting.Indented)}");
                throw new Exception($"接口地址:{url}---请求次数已达到限制,请稍后再试。");
                throw new Exception($"接口地址:{url}---请求次数已达到限制,请稍后再试。");
            }
        }
@@ -73,7 +87,6 @@
        {
            requestTracker[requestKey] = (1, DateTime.Now);
        }
        // è®°å½•请求参数
        LogRequestParameters(parameters, url);
@@ -137,4 +150,18 @@
        }
    }
    // æ¸…理requestTracker的方法
    private static void CleanupRequestTracker(object sender, ElapsedEventArgs e)
    {
        // èŽ·å–å½“å‰æ—¶é—´
        DateTime now = DateTime.Now;
        // éåŽ†å¹¶æ¸…ç†requestTracker中超过10分钟的记录
        var keysToRemove = requestTracker.Keys.Where(key => now > requestTracker[key].LastRequestTime.AddMinutes(10)).ToList();
        foreach (var key in keysToRemove)
        {
            requestTracker.Remove(key);
        }
    }
}
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/ǰ¶ÎÏßÌåµãλͼ/08ÈýÂ¥ÊäËͲ¼¾Öµãλͼ1107.DWG.lck
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/ǰ¶ÎÏßÌåµãλͼ/08ÈýÂ¥ÊäËͲ¼¾Öµãλͼ1107.dwg.bak
Binary files differ