刘磊
2025-01-08 1d044540ee1b7041c7e89bdfe6d1339c99e80a4e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using LogLibrary.Log;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace WIDESEA_Common;
 
public class HttpsClient
{
    private static readonly LogFactory LogFactory = new LogFactory();
 
    // 封装一个用HttpClient发送GET请求的方法有参数
    public static async Task<string> GetAsync(string url, Dictionary<string, object> parameters)
    {
        // 记录请求参数
        LogRequestParameters(parameters, url);
 
        // 将参数拼接到URL中
        string queryString = string.Join("&", parameters.Select(x => $"{x.Key}={x.Value}"));
        url += "?" + queryString;
 
        // 创建HttpClient实例
        using (HttpClient client = new HttpClient())
        {
            // 发送GET请求并获取响应
            HttpResponseMessage response = await client.GetAsync(url);
 
            // 确保响应成功
            response.EnsureSuccessStatusCode();
 
            // 读取响应内容
            string responseBody = await response.Content.ReadAsStringAsync();
 
            // 记录响应参数
            LogResponseParameters(responseBody, url);
 
            // 返回响应内容
            return responseBody;
        }
    }
 
    // 封装一个用HttpClient发送Post请求的方法有参数
    public static async Task<string> PostAsync(string url, Dictionary<string, object> parameters)
    {
        // 记录请求参数
        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;
        }
    }
 
    private static void LogRequestParameters(Dictionary<string, object> parameters,string url = "")
    {
        StringBuilder builder = new StringBuilder();
        builder.Append(Environment.NewLine);
        builder.Append("---------------------------------------------");
        builder.Append(Environment.NewLine);
        builder.Append("url:" + url + "请求参数: " + JsonConvert.SerializeObject(parameters));
        LogFactory.GetLog("API接口").Info(true, 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);
        LogFactory.GetLog("API接口").Info(true, builder);
    }
 
    private static IEnumerable<KeyValuePair<string, string>> ConvertToKeyValuePairs(Dictionary<string, object> parameters)
    {
        foreach (var kvp in parameters)
        {
            yield return new KeyValuePair<string, string>(kvp.Key, kvp.Value?.ToString());
        }
    }
 
}