z8018
2 天以前 d8dc91f9c1fece5711e38edd1b1274cb9e579015
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.LogHelper;
 
namespace WIDESEA_Core.Helper
{
    public class HttpHelper
    {
        /// <summary>
        /// 异步发送HTTP GET请求并返回响应内容
        /// </summary>
        /// <param name="serviceAddress">请求的服务地址</param>
        /// <param name="contentType">响应内容类型,默认为application/json</param>
        /// <param name="headers">请求头字典,可选参数</param>
        /// <returns>返回请求结果的字符串内容</returns>
        /// <exception cref="Exception">当请求过程中发生错误时抛出异常</exception>
        /// <remarks>
        /// 方法会自动记录请求日志,包含请求地址、响应内容和耗时等信息
        /// 默认请求超时时间为60秒
        /// </remarks>
        public static async Task<string> GetAsync(string serviceAddress, string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using HttpClient httpClient = new HttpClient();
                httpClient.Timeout = new TimeSpan(0, 0, 60);
 
                if (headers != null)
                {
                    foreach (var header in headers)
                        httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                }
 
                result = await httpClient.GetAsync(serviceAddress).Result.Content.ReadAsStringAsync();
                return result;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                Logger.Add(serviceAddress, "", result, beginDate);
            }
        }
 
        /// <summary>
        /// 异步发送HTTP POST请求
        /// </summary>
        /// <param name="serviceAddress">服务地址</param>
        /// <param name="requestJson">请求JSON数据</param>
        /// <param name="contentType">内容类型,默认为application/json</param>
        /// <param name="headers">请求头字典</param>
        /// <returns>返回响应内容字符串,失败时抛出异常</returns>
        /// <remarks>
        /// 自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
        /// </remarks>
        public static async Task<string?> PostAsync(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using (HttpContent httpContent = new StringContent(requestJson))
                {
                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    using HttpClient httpClient = new HttpClient();
                    httpClient.Timeout = new TimeSpan(0, 0, 60);
 
                    if (headers != null)
                    {
                        foreach (var header in headers)
                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                    }
 
                    result = await httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync();
                }
                return result;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                Logger.Add(serviceAddress, requestJson == null ? "": requestJson, result, beginDate);
            }
        }
 
        /// <summary>
        /// 发送HTTP GET请求到指定服务地址
        /// </summary>
        /// <param name="serviceAddress">请求的服务地址</param>
        /// <param name="contentType">请求内容类型,默认为application/json</param>
        /// <param name="headers">请求头字典,可选参数</param>
        /// <returns>返回服务响应字符串</returns>
        /// <exception cref="Exception">当请求发生错误时抛出异常</exception>
        /// /// <remarks>
        /// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
        /// </remarks>
        public static string Get(string serviceAddress, string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using HttpClient httpClient = new HttpClient();
                httpClient.Timeout = new TimeSpan(0, 0, 60);
 
                if (headers != null)
                {
                    foreach (var header in headers)
                        httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                }
 
                result = httpClient.GetStringAsync(serviceAddress).Result;
                return result;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                Logger.Add(serviceAddress, "", result, beginDate);
            }
        }
 
        /// <summary>
        /// 发送HTTP POST请求到指定服务地址
        /// </summary>
        /// <param name="serviceAddress">服务地址URL</param>
        /// <param name="requestJson">请求的JSON数据</param>
        /// <param name="contentType">内容类型,默认为application/json</param>
        /// <param name="headers">请求头字典</param>
        /// <returns>返回服务端响应内容</returns>
        /// <exception cref="Exception">当请求发生异常时抛出</exception>
        /// <remarks>
        /// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
        /// </remarks>
        public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using (HttpContent httpContent = new StringContent(requestJson))
                {
                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    using HttpClient httpClient = new HttpClient();
                    httpClient.Timeout = new TimeSpan(0, 0, 60);
 
                    if (headers != null)
                    {
                        foreach (var header in headers)
                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                    }
 
                    result = httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync().Result;
                }
                return result;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
            }
        }
    }
}