|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 用于追踪每个请求的调用次数和最后请求时间。 | 
|---|
|  |  |  | 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(10)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 如果请求次数超过限制且未超过10分钟,抛出异常 | 
|---|
|  |  |  | throw new InvalidOperationException("请求次数已达到限制,请稍后再试。"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新请求跟踪信息 | 
|---|
|  |  |  | if (requestTracker.ContainsKey(requestKey)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | requestTracker[requestKey] = (1, DateTime.Now); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 记录请求参数 | 
|---|
|  |  |  | LogRequestParameters(parameters, url); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 将参数转换为FormUrlEncodedContent | 
|---|
|  |  |  | string content = JsonConvert.SerializeObject(parameters); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //client.Timeout = TimeSpan.from; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var request = new HttpRequestMessage(HttpMethod.Post, url); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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); | 
|---|