You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.2 KiB
C#

9 months ago
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Net.Http;
using System.Net.Mime;
using System.Net;
namespace HttpClientStudy.Core
{
/// <summary>
/// 简单 HttpClient 包装类
/// </summary>
public class SimpleHttpClient
{
9 months ago
#region Get请求
9 months ago
public string Get(string url)
{
HttpClient client = new HttpClient();
//可以统一设置HttpClient属性HttpClient可以使用统一设置进行多次请求。
//client.BaseAddress = new Uri(url);
//client.DefaultRequestHeaders.Add("Accept", "application/json");
//client.DefaultRequestVersion = HttpVersion.Version10;
//client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
//client.Timeout = TimeSpan.FromSeconds(60);
//client.CancelPendingRequests();
//只有Send是同步方法其它全为异步方法。
//Send同步方法需要HttpRequestMessage参数
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
var response = client.Send(request);
response.EnsureSuccessStatusCode();
//或者
if (response.IsSuccessStatusCode)
9 months ago
{
9 months ago
//业务逻辑
}
//状态码
if (response is { StatusCode: HttpStatusCode.OK })
{
//业务逻辑
}
//请求头
9 months ago
if (response is { Headers.ETag: null })
{
9 months ago
//业务逻辑
}
var result = response.Content.ReadAsStringAsync().Result;
return result;
}
public async Task<string> GetAsync(string url)
{
HttpClient client = new HttpClient();
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return result;
}
public TResult? GetJson<TResult>(string url)
{
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
var response = client.Send(request);
response.EnsureSuccessStatusCode();
if (response.Content.Headers.ContentType?.MediaType != MediaTypeNames.Application.Json)
{
throw new HttpRequestException("响应不是 json 格式!");
}
var result = response.Content.ReadFromJsonAsync<TResult>().Result;
return result;
}
public async Task<TResult?> GetJsonAsync<TResult>(string url)
{
HttpClient client = new HttpClient();
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
if (response.Content.Headers.ContentType?.MediaType != MediaTypeNames.Application.Json)
{
throw new HttpRequestException("响应不是 json 格式!");
}
var result = await response.Content.ReadFromJsonAsync<TResult>();
return result;
}
9 months ago
#endregion
9 months ago
}
}