namespace HttpClientStudy.UnitTest.HttpClients { /// /// 简单 HttpClient 包装类 /// public class BaseHttpClient { #region Get请求 public string Get(string url) { var 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参数 var 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) { var client = new HttpClient(); var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); return result; } public TResult? GetJson(string url) { var client = new HttpClient(); var 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) { var 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 #region Head #endregion #region Put #endregion #region Post #endregion #region Options #endregion #region Delete #endregion #region Trace #endregion #region Connect #endregion #region Patch #endregion } }