| | |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using System.Xml; |
| | | using WIDESEA.Common; |
| | | using Formatting = System.Xml.Formatting; |
| | | |
| | | namespace WIDESEA_Common; |
| | | |
| | |
| | | // å°è£
ä¸ä¸ªç¨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)) |
| | | try |
| | | { |
| | | if (requestInfo.Count >= 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(10)) |
| | | // å建ä¸ä¸ªæ°çåå
¸ï¼æé¤ 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)) |
| | | { |
| | | // å¦æè¯·æ±æ¬¡æ°è¶
è¿éå¶ä¸æªè¶
è¿10åéï¼æåºå¼å¸¸ |
| | | throw new InvalidOperationException("è¯·æ±æ¬¡æ°å·²è¾¾å°éå¶ï¼è¯·ç¨ååè¯ã"); |
| | | 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); |
| | | |
| | | // å建HttpClientå®ä¾ |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // å°åæ°è½¬æ¢ä¸ºFormUrlEncodedContent |
| | | string content = JsonConvert.SerializeObject(parameters); |
| | | |
| | | //client.Timeout = TimeSpan.from; |
| | | |
| | | var request = new HttpRequestMessage(HttpMethod.Post, url); |
| | | |
| | | request.Content = new StringContent(content, Encoding.UTF8, "application/json"); |
| | | //var content = new FormUrlEncodedContent(ConvertToKeyValuePairs(parameters)); |
| | | //// åéPOST请æ±å¹¶è·åååº |
| | | //HttpResponseMessage response = await client.PostAsync(url, content); |
| | | HttpResponseMessage response = await client.SendAsync(request); |
| | | |
| | | // ç¡®ä¿ååºæå |
| | | response.EnsureSuccessStatusCode(); |
| | | |
| | | // 读åååºå
容 |
| | | string responseBody = await response.Content.ReadAsStringAsync(); |
| | | |
| | | // è®°å½ååºåæ° |
| | | LogResponseParameters(responseBody, url); |
| | | |
| | | // è¿åååºå
容 |
| | | return responseBody; |
| | | } |
| | | } |
| | | |
| | | // æ´æ°è¯·æ±è·è¸ªä¿¡æ¯ |
| | | if (requestTracker.ContainsKey(requestKey)) |
| | | catch (Exception ex) |
| | | { |
| | | requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now); |
| | | } |
| | | else |
| | | { |
| | | requestTracker[requestKey] = (1, DateTime.Now); |
| | | LogErrorParameters(ex.StackTrace, ex.Message, url); |
| | | return ex.Message; |
| | | } |
| | | |
| | | |
| | | // è®°å½è¯·æ±åæ° |
| | | LogRequestParameters(parameters, url); |
| | | |
| | | // å建HttpClientå®ä¾ |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // å°åæ°è½¬æ¢ä¸ºFormUrlEncodedContent |
| | | //string content = JsonConvert.SerializeObject(parameters); |
| | | var content = new FormUrlEncodedContent(ConvertToKeyValuePairs(parameters)); |
| | | |
| | | //client.Timeout = TimeSpan.from; |
| | | |
| | | var request = new HttpRequestMessage(HttpMethod.Post, url); |
| | | request.Content = content; |
| | | |
| | | //request.Content = new StringContent(content, Encoding.UTF8, "application/json"); |
| | | |
| | | //// åéPOST请æ±å¹¶è·åååº |
| | | //HttpResponseMessage response = await client.PostAsync(url, content); |
| | | HttpResponseMessage response = await client.SendAsync(request); |
| | | |
| | | // ç¡®ä¿ååºæå |
| | | response.EnsureSuccessStatusCode(); |
| | | |
| | | // 读åååºå
容 |
| | | string responseBody = await response.Content.ReadAsStringAsync(); |
| | | |
| | | // è®°å½ååºåæ° |
| | | LogResponseParameters(responseBody, url); |
| | | |
| | | // è¿åååºå
容 |
| | | return responseBody; |
| | | } |
| | | } |
| | | |
| | | // å°è£
ä¸ä¸ªç¨HttpClientåéPost请æ±çæ¹æ³æåæ° |
| | | public static string Post(string url) |
| | | private static void LogErrorParameters(string errordetail, string error, string url = "") |
| | | { |
| | | // è®°å½è¯·æ±åæ° |
| | | //LogRequestParameters(null, url); |
| | | |
| | | // å建HttpClientå®ä¾ |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // å°åæ°è½¬æ¢ä¸ºFormUrlEncodedContent |
| | | //string content = JsonConvert.SerializeObject(parameters); |
| | | //var content = new FormUrlEncodedContent(ConvertToKeyValuePairs(parameters)); |
| | | |
| | | //client.Timeout = TimeSpan.from; |
| | | |
| | | var request = new HttpRequestMessage(HttpMethod.Post, url); |
| | | //request.Content = content; |
| | | |
| | | //request.Content = new StringContent(content, Encoding.UTF8, "application/json"); |
| | | |
| | | //// åéPOST请æ±å¹¶è·åååº |
| | | //HttpResponseMessage response = await client.PostAsync(url, content); |
| | | HttpResponseMessage response = client.Send(request); |
| | | |
| | | // ç¡®ä¿ååºæå |
| | | response.EnsureSuccessStatusCode(); |
| | | // 读åååºå
容 |
| | | Stream stream = response.Content.ReadAsStream(); |
| | | StreamReader streamReader = new StreamReader(stream); |
| | | string webResponse = streamReader.ReadToEnd(); |
| | | |
| | | // è®°å½ååºåæ° |
| | | LogResponseParameters(webResponse, url); |
| | | |
| | | // è¿åååºå
容 |
| | | return webResponse; |
| | | } |
| | | 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)); |
| | | LogFactory.GetLog("APIæ¥å£å¼å¸¸").Error(true, builder); |
| | | } |
| | | |
| | | public static string PostXml(string url, Dictionary<string, object> parameters) |
| | | { |
| | | // è®°å½è¯·æ±åæ° |
| | | LogRequestParameters(parameters, url); |
| | | |
| | | // å建HttpClientå®ä¾ |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // å°åæ°è½¬æ¢ä¸ºFormUrlEncodedContent |
| | | //string content = JsonConvert.SerializeObject(parameters); |
| | | var content = new FormUrlEncodedContent(ConvertToKeyValuePairs(parameters)); |
| | | |
| | | //åç§è¶
æ¶ |
| | | client.Timeout = new TimeSpan(0, 0, 10); |
| | | |
| | | var request = new HttpRequestMessage(HttpMethod.Post, url); |
| | | request.Content = content; |
| | | |
| | | //request.Content = new StringContent(content, Encoding.UTF8, "application/json"); |
| | | |
| | | //// åéPOST请æ±å¹¶è·åååº |
| | | //HttpResponseMessage response = await client.PostAsync(url, content); |
| | | HttpResponseMessage response = client.Send(request); |
| | | |
| | | // ç¡®ä¿ååºæå |
| | | response.EnsureSuccessStatusCode(); |
| | | //string xmlContent = await response.Content.ReadAsStringAsync(); |
| | | |
| | | // 读åååºå
容 |
| | | Stream stream = response.Content.ReadAsStream(); |
| | | StreamReader streamReader = new StreamReader(stream); |
| | | string respon = streamReader.ReadToEnd(); |
| | | |
| | | //string webResponse = XmlToJson(respon); |
| | | |
| | | string webResponse = ReplaceXmlStyle(respon); |
| | | |
| | | // 读åååºå
容 |
| | | //Stream stream = response.Content.ReadAsStream(); |
| | | //StreamReader streamReader = new StreamReader(stream); |
| | | //string webResponse = streamReader.ReadToEnd(); |
| | | |
| | | // è®°å½ååºåæ° |
| | | LogResponseParameters(webResponse, url); |
| | | |
| | | // è¿åååºå
容 |
| | | return webResponse; |
| | | } |
| | | } |
| | | |
| | | static string XmlToJson(string xmlContent) |
| | | { |
| | | // æåå
å± XML å
容 |
| | | int startIndex = xmlContent.IndexOf("<?xml"); |
| | | string innerXml = xmlContent.Substring(startIndex); |
| | | // å»é¤å¤å±å¤ä½çå
容ï¼å设å¤å±åªæ <string> ç¸å
³å
å®¹ï¼ |
| | | innerXml = Regex.Replace(innerXml, @"^.*?<ROOT>", "<ROOT>"); |
| | | |
| | | // å»é¤å
å± XML 声æ |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", ""); |
| | | innerXml = innerXml.Replace("<string xmlns=\"http://tempuri.org/\">", ""); |
| | | |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"GB2312\"?>", ""); |
| | | // å¤ç转ä¹å符 |
| | | innerXml = innerXml.Replace("<", "<"); |
| | | innerXml = innerXml.Replace(">", ">"); |
| | | innerXml = innerXml.Replace("</string>", ""); |
| | | |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"GB2312\"?>", ""); |
| | | |
| | | //innerXml = innerXml.Replace("<ROOT>", ""); |
| | | //innerXml = innerXml.Replace("</ROOT>", ""); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(innerXml); |
| | | |
| | | // å°XML转æ¢ä¸ºJSON |
| | | string json = JsonConvert.SerializeXmlNode(xmlDoc); |
| | | |
| | | return json; |
| | | } |
| | | |
| | | static string ReplaceXmlStyle(string xmlContent) |
| | | { |
| | | // æåå
å± XML å
容 |
| | | int startIndex = xmlContent.IndexOf("<?xml"); |
| | | string innerXml = xmlContent.Substring(startIndex); |
| | | // å»é¤å¤å±å¤ä½çå
容ï¼å设å¤å±åªæ <string> ç¸å
³å
å®¹ï¼ |
| | | innerXml = Regex.Replace(innerXml, @"^.*?<ROOT>", "<ROOT>"); |
| | | |
| | | // å»é¤å
å± XML 声æ |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", ""); |
| | | innerXml = innerXml.Replace("<string xmlns=\"http://tempuri.org/\">", ""); |
| | | |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"GB2312\"?>", ""); |
| | | // å¤ç转ä¹å符 |
| | | innerXml = innerXml.Replace("<", "<"); |
| | | innerXml = innerXml.Replace(">", ">"); |
| | | innerXml = innerXml.Replace("</string>", ""); |
| | | |
| | | innerXml = innerXml.Replace("<?xml version=\"1.0\" encoding=\"GB2312\"?>", ""); |
| | | |
| | | //innerXml = innerXml.Replace("<ROOT>", ""); |
| | | //innerXml = innerXml.Replace("</ROOT>", ""); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(innerXml); |
| | | |
| | | return xmlDoc.InnerXml; |
| | | //return xmlContent; |
| | | } |
| | | |
| | | |
| | | private static void LogRequestParameters(Dictionary<string, object> parameters, string url = "") |
| | | { |
| | | StringBuilder builder = new StringBuilder(); |
| | |
| | | LogFactory.GetLog("APIæ¥å£").Info(true, builder); |
| | | } |
| | | |
| | | |
| | | |
| | | private static IEnumerable<KeyValuePair<string, string>> ConvertToKeyValuePairs(Dictionary<string, object> parameters) |
| | | { |
| | | foreach (var kvp in parameters) |