Skip to content

Commit b8fb953

Browse files
committed
[增加]1. 增加序列化数据的JSON序列化选项参数的传递函数
1 parent da8bfc0 commit b8fb953

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

GameFrameX.Foundation.Http.Extension/HttpClientPostExtension.cs

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@ public static async Task<string> PostJsonToStringAsync<TValue>(this HttpClient h
2727
return await response.Content.ReadAsStringAsync(cancellationToken);
2828
}
2929

30+
/// <summary>
31+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字符串
32+
/// </summary>
33+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
34+
/// <param name="httpClient">HttpClient实例</param>
35+
/// <param name="url">请求URL</param>
36+
/// <param name="data">要发送的数据</param>
37+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
38+
/// <param name="cancellationToken">取消令牌</param>
39+
/// <returns>响应内容的字符串形式</returns>
40+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
41+
public static async Task<string> PostJsonToStringAsync<TValue>(this HttpClient httpClient, string url, TValue data, JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken = default)
42+
{
43+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
44+
ArgumentNullException.ThrowIfNull(url, nameof(url));
45+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
46+
return await response.Content.ReadAsStringAsync(cancellationToken);
47+
}
48+
3049
/// <summary>
3150
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字符串
3251
/// </summary>
@@ -61,6 +80,41 @@ public static async Task<string> PostJsonToStringAsync<TValue>(this HttpClient h
6180
return await response.Content.ReadAsStringAsync(cancellationToken);
6281
}
6382

83+
/// <summary>
84+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字符串
85+
/// </summary>
86+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
87+
/// <param name="httpClient">HttpClient实例</param>
88+
/// <param name="url">请求URL</param>
89+
/// <param name="data">要发送的数据</param>
90+
/// <param name="headers">请求头字典</param>
91+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
92+
/// <param name="timeout">超时时间(秒)</param>
93+
/// <param name="cancellationToken">取消令牌</param>
94+
/// <returns>响应内容的字符串形式</returns>
95+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
96+
public static async Task<string> PostJsonToStringAsync<TValue>(this HttpClient httpClient, string url, TValue data, IDictionary<string, string> headers, JsonSerializerOptions jsonSerializerOptions, int timeout = 10, CancellationToken cancellationToken = default)
97+
{
98+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
99+
ArgumentNullException.ThrowIfNull(url, nameof(url));
100+
httpClient.Timeout = TimeSpan.FromSeconds(timeout);
101+
if (headers is { Count: > 0 })
102+
{
103+
foreach (var header in headers)
104+
{
105+
if (httpClient.DefaultRequestHeaders.Contains(header.Key))
106+
{
107+
httpClient.DefaultRequestHeaders.Remove(header.Key);
108+
}
109+
110+
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
111+
}
112+
}
113+
114+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
115+
return await response.Content.ReadAsStringAsync(cancellationToken);
116+
}
117+
64118
/// <summary>
65119
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字节数组
66120
/// </summary>
@@ -79,6 +133,25 @@ public static async Task<byte[]> PostJsonToByteArrayAsync<TValue>(this HttpClien
79133
return await response.Content.ReadAsByteArrayAsync(cancellationToken);
80134
}
81135

136+
/// <summary>
137+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字节数组
138+
/// </summary>
139+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
140+
/// <param name="httpClient">HttpClient实例</param>
141+
/// <param name="url">请求URL</param>
142+
/// <param name="data">要发送的数据</param>
143+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
144+
/// <param name="cancellationToken">取消令牌</param>
145+
/// <returns>响应内容的字节数组形式</returns>
146+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
147+
public static async Task<byte[]> PostJsonToByteArrayAsync<TValue>(this HttpClient httpClient, string url, TValue data, JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken = default)
148+
{
149+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
150+
ArgumentNullException.ThrowIfNull(url, nameof(url));
151+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
152+
return await response.Content.ReadAsByteArrayAsync(cancellationToken);
153+
}
154+
82155
/// <summary>
83156
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字节数组
84157
/// </summary>
@@ -113,6 +186,41 @@ public static async Task<byte[]> PostJsonToByteArrayAsync<TValue>(this HttpClien
113186
return await response.Content.ReadAsByteArrayAsync(cancellationToken);
114187
}
115188

189+
/// <summary>
190+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为字节数组
191+
/// </summary>
192+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
193+
/// <param name="httpClient">HttpClient实例</param>
194+
/// <param name="url">请求URL</param>
195+
/// <param name="data">要发送的数据</param>
196+
/// <param name="headers">请求头字典</param>
197+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
198+
/// <param name="timeout">超时时间(秒)</param>
199+
/// <param name="cancellationToken">取消令牌</param>
200+
/// <returns>响应内容的字节数组形式</returns>
201+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
202+
public static async Task<byte[]> PostJsonToByteArrayAsync<TValue>(this HttpClient httpClient, string url, TValue data, IDictionary<string, string> headers, JsonSerializerOptions jsonSerializerOptions, int timeout = 10, CancellationToken cancellationToken = default)
203+
{
204+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
205+
ArgumentNullException.ThrowIfNull(url, nameof(url));
206+
httpClient.Timeout = TimeSpan.FromSeconds(timeout);
207+
if (headers is { Count: > 0 })
208+
{
209+
foreach (var header in headers)
210+
{
211+
if (httpClient.DefaultRequestHeaders.Contains(header.Key))
212+
{
213+
httpClient.DefaultRequestHeaders.Remove(header.Key);
214+
}
215+
216+
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
217+
}
218+
}
219+
220+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
221+
return await response.Content.ReadAsByteArrayAsync(cancellationToken);
222+
}
223+
116224
/// <summary>
117225
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为流
118226
/// </summary>
@@ -131,6 +239,25 @@ public static async Task<Stream> PostJsonToStreamAsync<TValue>(this HttpClient h
131239
return await response.Content.ReadAsStreamAsync(cancellationToken);
132240
}
133241

242+
/// <summary>
243+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为流
244+
/// </summary>
245+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
246+
/// <param name="httpClient">HttpClient实例</param>
247+
/// <param name="url">请求URL</param>
248+
/// <param name="data">要发送的数据</param>
249+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
250+
/// <param name="cancellationToken">取消令牌</param>
251+
/// <returns>响应内容的流形式</returns>
252+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
253+
public static async Task<Stream> PostJsonToStreamAsync<TValue>(this HttpClient httpClient, string url, TValue data, JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken = default)
254+
{
255+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
256+
ArgumentNullException.ThrowIfNull(url, nameof(url));
257+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
258+
return await response.Content.ReadAsStreamAsync(cancellationToken);
259+
}
260+
134261
/// <summary>
135262
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为流
136263
/// </summary>
@@ -165,6 +292,41 @@ public static async Task<Stream> PostJsonToStreamAsync<TValue>(this HttpClient h
165292
return await response.Content.ReadAsStreamAsync(cancellationToken);
166293
}
167294

295+
/// <summary>
296+
/// 发送POST请求,将JSON数据序列化后发送,并将响应内容读取为流
297+
/// </summary>
298+
/// <typeparam name="TValue">要发送的数据类型</typeparam>
299+
/// <param name="httpClient">HttpClient实例</param>
300+
/// <param name="url">请求URL</param>
301+
/// <param name="data">要发送的数据</param>
302+
/// <param name="headers">请求头字典</param>
303+
/// <param name="jsonSerializerOptions">JSON序列化选项</param>
304+
/// <param name="timeout">超时时间(秒)</param>
305+
/// <param name="cancellationToken">取消令牌</param>
306+
/// <returns>响应内容的流形式</returns>
307+
/// <exception cref="ArgumentNullException">当httpClient或url为null时抛出</exception>
308+
public static async Task<Stream> PostJsonToStreamAsync<TValue>(this HttpClient httpClient, string url, TValue data, IDictionary<string, string> headers, JsonSerializerOptions jsonSerializerOptions, int timeout = 10, CancellationToken cancellationToken = default)
309+
{
310+
ArgumentNullException.ThrowIfNull(httpClient, nameof(httpClient));
311+
ArgumentNullException.ThrowIfNull(url, nameof(url));
312+
httpClient.Timeout = TimeSpan.FromSeconds(timeout);
313+
if (headers is { Count: > 0 })
314+
{
315+
foreach (var header in headers)
316+
{
317+
if (httpClient.DefaultRequestHeaders.Contains(header.Key))
318+
{
319+
httpClient.DefaultRequestHeaders.Remove(header.Key);
320+
}
321+
322+
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
323+
}
324+
}
325+
326+
var response = await httpClient.PostAsJsonAsync<TValue>(url, data, jsonSerializerOptions, cancellationToken);
327+
return await response.Content.ReadAsStreamAsync(cancellationToken);
328+
}
329+
168330
/// <summary>
169331
/// 发送POST请求,将表单数据发送,并将响应内容读取为字符串
170332
/// </summary>

0 commit comments

Comments
 (0)