HttpClient 和 HttpRequestMessage - daniel-qa/C_Sharp GitHub Wiki

HttpClient 和 HttpRequestMessage

HttpClient

HttpClient 是 .NET Framework 和 .NET Core 中用于发送 HTTP 请求的强大类它提供了一个简单而强大的 API,可以用来与 Web 服务进行通信

以下是关于 HttpClient 的一些重要点:

  • 创建实例
HttpClient httpClient = new HttpClient();
  • 发送请求
HttpResponseMessage response = await httpClient.SendAsync(request);

使用 SendAsync 方法可以发送一个异步的 HTTP 请求,并且可以通过参数配置请求的细节,比如请求的类型(GET、POST 等)和内容(如果是 POST 请求)

  • 释放资源

HttpClient 实现了 IDisposable 接口,因此应在使用完毕后通过 Dispose() 方法释放资源。通常建议使用完 HttpClient 后及时释放,或通过 using 语句块来确保资源正确释放

HttpRequestMessage

HttpRequestMessage 表示一个 HTTP 请求消息,它包含了发送到服务器的所有信息,包括 URL、HTTP 方法、请求头、请求内容等

以下是关于 HttpRequestMessage 的一些重要点:

  • 创建实例
var request = new HttpRequestMessage(HttpMethod.Get, url);

使用 new HttpRequestMessage(HttpMethod, string) 构造函数可以创建一个 HttpRequestMessage 实例。 第一个参数是 HttpMethod 枚举,指定请求的方法(GET、POST 等),第二个参数是请求的 URL

  • 配置请求

HttpRequestMessage 允许你通过属性和方法来配置请求,比如添加请求头设置请求内容(对于 POST 请求)设置超时时间等

  • 发送请求
HttpClient.SendAsync(request) 方法接受一个 HttpRequestMessage 参数,用来发送请求并返回一个 Task<HttpResponseMessage>,表示异步操作的结果。
  • 释放资源

虽然通常 HttpRequestMessage 不需要显式释放,但在一些高级场景下可能需要注意其生命周期和资源管理,尤其是在多次重用 HttpRequestMessage 实例时。

  • 示例代码解释
var request = new HttpRequestMessage(HttpMethod.Get, url);
HttpResponseMessage response = _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).Result;

response.EnsureSuccessStatusCode();

var request = new HttpRequestMessage(HttpMethod.Get, url); 创建一个 HTTP GET 请求消息,指定了请求的方法和 URL

_httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).Result; 使用 _httpClient 发送异步请求,并阻塞等待结果

HttpCompletionOption.ResponseHeadersRead 表示仅在读取完响应头后就完成操作,不需要等待整个响应内容

response.EnsureSuccessStatusCode(); 确保响应状态码表明请求成功,否则会抛出 HttpRequestException

結論,HttpClient 和 HttpRequestMessage 是 C# 中用于发送和配置 HTTP 请求的核心组件,它们能够方便地与远程服务器通信并处理响应