再说HttpClient类(1)

135 阅读2分钟

HttpClient 是 .NET 中用于发送 HTTP 请求和接收 HTTP 响应的类。它与 HttpContent 类一起使用,后者表示 HTTP 请求或响应的内容。HttpContent 是一个抽象类,提供了多种派生类来处理不同类型的 HTTP 内容,例如 ByteArrayContentStreamContentMultipartContentJsonContent

System.Net.Http.ByteArrayContent

ByteArrayContentHttpContent 的一个派生类,用于发送字节数组形式的数据。它提供了一个构造函数,接受一个字节数组并将其用作 HTTP 请求的内容。

使用方法

  1. 创建 ByteArrayContent 实例,传入字节数组。
  2. 设置 HttpRequestMessageContent 属性为 ByteArrayContent 实例。
  3. 发送请求。

示例代码


byte[] fileContents = File.ReadAllBytes("file_path");
ByteArrayContent byteArrayContent = new ByteArrayContent(fileContents);
using (HttpClient httpClient = new HttpClient())
{
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://example.com/api");
    request.Content = byteArrayContent;
    HttpResponseMessage response = await httpClient.SendAsync(request);
    // 处理响应
}

System.Net.Http.Json.JsonContent

JsonContent 是一个用于发送 JSON 格式数据的 HttpContent 派生类。它使用 System.Text.Json 序列化对象到 JSON。

使用方法

  1. 使用 JsonContent.Create 方法创建实例,传入要序列化的对象。
  2. 设置 HttpRequestMessageContent 属性为 JsonContent 实例。
  3. 发送请求。

示例代码

var data = new { Name = "Kimi", Age = 30 };
JsonContent jsonContent = JsonContent.Create(data);
using (HttpClient httpClient = new HttpClient())
{
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://example.com/api");
    request.Content = jsonContent;
    HttpResponseMessage response = await httpClient.SendAsync(request);
    // 处理响应
}

System.Net.Http.MultipartContent

MultipartContent 是用于发送多部分表单数据的 HttpContent 派生类,常用于文件上传。

使用方法

  1. 创建 MultipartFormDataContent 实例。
  2. 使用 Add 方法添加字符串或文件内容。
  3. 设置 HttpRequestMessageContent 属性为 MultipartContent 实例。
  4. 发送请求。

示例代码

using (HttpClient client = new HttpClient())
{
    var content = new MultipartFormDataContent();
    content.Add(new StringContent("value"), "key");
    content.Add(new ByteArrayContent(File.ReadAllBytes("file_path")), "file", "file_name");
    var response = await client.PostAsync("http://example.com/api", content);
    // 处理响应
}

System.Net.Http.StreamContent

StreamContent 是用于发送流数据的 HttpContent 派生类。

使用方法

  1. 创建 StreamContent 实例,传入一个 Stream 对象。
  2. 设置 HttpRequestMessageContent 属性为 StreamContent 实例。
  3. 发送请求。

示例代码

using (Stream stream = File.OpenRead("file_path"))
{
    StreamContent streamContent = new StreamContent(stream);
    using (HttpClient httpClient = new HttpClient())
    {
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://example.com/api");
        request.Content = streamContent;
        HttpResponseMessage response = await httpClient.SendAsync(request);
        // 处理响应
    }
}

设计思路

  • ByteArrayContent 允许开发者直接将字节数组发送到服务器,适用于较小的数据。
  • JsonContent 提供了一种方便的方式来发送 JSON 数据,自动处理序列化。
  • MultipartContent 支持同时发送文件和其他数据,非常适合表单数据和文件上传场景。
  • StreamContent 则提供了一种灵活的方式来发送流数据,适用于大文件或未知大小的数据。

这些类的设计使得 HttpClient 能够灵活地处理各种类型的 HTTP 请求内容。