You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET HttpClient如何读取单个请求返回的多个响应?

使用.NET HttpClient读取多响应(含1xx信息性响应)的方法

可行,.NET HttpClient(.NET Core 3.0及以上版本)支持捕获HTTP规范中定义的1xx信息性临时响应,不过默认不会主动暴露这些响应,需要通过特定API获取。

核心实现方式

默认情况下,HttpClient的请求方法会自动处理1xx响应,仅返回最终的非1xx响应。要获取所有1xx临时响应,可通过HttpResponseMessage的InformationalResponses集合读取,步骤如下:

  1. 发送请求时指定合适的完成选项
    使用HttpCompletionOption.ResponseHeadersRead可以在响应头返回后立即处理,无需等待响应体下载完成,更高效地捕获1xx响应(也可使用默认的ResponseContentRead,但前者更适合需要提前处理临时响应的场景)。

  2. 遍历并处理1xx信息性响应
    最终的HttpResponseMessage对象包含InformationalResponses集合,里面存储了所有收到的1xx临时响应,每个响应可读取状态码和响应头(1xx响应无响应体)。

代码示例

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var httpClient = new HttpClient();
        var request = new HttpRequestMessage(HttpMethod.Get, "https://your-target-api.com/endpoint");

        // 发送请求,指定ResponseHeadersRead选项
        var finalResponse = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

        // 处理所有1xx信息性响应
        foreach (var infoResponse in finalResponse.InformationalResponses)
        {
            Console.WriteLine($"收到信息性响应:状态码 {infoResponse.StatusCode}");
            foreach (var header in infoResponse.Headers)
            {
                Console.WriteLine($"  {header.Key}: {string.Join(", ", header.Value)}");
            }
        }

        // 处理最终响应
        Console.WriteLine($"最终响应状态码:{finalResponse.StatusCode}");
        var responseContent = await finalResponse.Content.ReadAsStringAsync();
        Console.WriteLine("最终响应内容:");
        Console.WriteLine(responseContent);
    }
}

注意事项

  • 版本限制:InformationalResponses属性仅在.NET Core 3.0、.NET 5及以上版本中可用,.NET Framework不支持该特性。
  • 1xx响应特性:所有1xx响应都是临时响应,没有响应体,只能读取状态码和响应头信息。

内容的提问来源于stack exchange,提问作者Volker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:12:31