using System.Net.Http.Headers; using System.Net.Http.Json; using System.Net.Http; using System.Net.Mime; using System.Net; namespace HttpClientStudy.Core { /// /// 简单 HttpClient 包装类 /// public class SimpleHttpClient { #region Get请求 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) { //业务逻辑 } //状态码 if (response is { StatusCode: HttpStatusCode.OK }) { //业务逻辑 } //请求头 if (response is { Headers.ETag: null }) { //业务逻辑 } var result = response.Content.ReadAsStringAsync().Result; return result; } public async Task 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(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().Result; return result; } public async Task GetJsonAsync(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(); return result; } #endregion } }