.NetCore主要提供了HttpWebRequest,WebClient,HttpClient这三种访问web的方式,其中HttpWebRequest,WebClient都在官方被标注为已过时,如果没有特殊需求,一般情况下还是使用官方推荐的HttpClient方式。
HttpClient 的基本使用方法
使用HttpClient发送请求一般是如下几步:
1.创建HttpClient对象
2.配置HttpClient对象的属性,如Header,请求方式等
3.执行请求获取访问对象的HttpResponse
4.处理得到的HttpResponse
using (HttpClient client = new HttpClient())
{
HttpResponseMessage responseMessage = await client.GetAsync(url);
responseMessage.EnsureSuccessStatusCode();//确认接口返回StatusCode,如果不是200则返回异常
string result = responseMessage.Content.ReadAsStringAsync().Result;
}
如果需要配置Header,可以在执行client之前添加
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(" account:password")));
但是根据最近的官方文档,using方式存在一定不确定性,多次请求的并发的时候用using不是很好的方式
using 语句中声明和实例化它并非首选操作,因为释放 HttpClient 对象时,基础套接字不会立即释放,这可能会导致套接字耗尽问题,最终可能会导致 SocketException 错误。要解决此问题,推荐的方法是将 HttpClient 对象创建为单一对象或静态对象
HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用
所以建议在开始就创建静态对象HttpClient 然后再使用
private static HttpClient Client = new HttpClient();
··········
Client.Dispose();
通过新建静态对象的方式的可以让电脑的资源占用情况得到明显的改善,但是该情况并不适用于设置不同请求头的情况,这时候可以使用IHttpClientFactory来实现
IHttpClientFactory是在 .NET Core 2.1 中引入的,使用服务可能需要 IHttpClientFactory 作为带有 DI 的构造函数参数。