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

C#中HttpClient Post请求响应内容乱码问题求助

解决HttpClient请求响应乱码问题

你的乱码内容开头是\u001f�\b,这是GZip压缩数据的特征码,说明服务器返回了GZip压缩后的响应,但你的HttpClient实例默认没有开启自动解压功能——Postman会自动处理压缩响应,所以能正常显示。另外原代码的请求头也缺少Postman自动携带的关键字段,这也可能影响服务器的响应格式。

修复步骤:

  1. 开启HttpClient自动解压
    创建HttpClient时,通过HttpClientHandler配置AutomaticDecompression,让客户端自动处理GZip/Deflate压缩的响应:

    var handler = new HttpClientHandler
    {
        AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
    };
    HttpClient client = new HttpClient(handler);
    
  2. 补全请求头(匹配Postman行为)

    • 给StringContent指定正确的Content-Type(Postman默认发送JSON时会设为application/json)
    • 添加Accept头声明接受JSON格式,Accept-Encoding声明支持压缩:
    var tokenRequest = new HttpRequestMessage(HttpMethod.Post, url);
    // 指定JSON内容类型和编码
    var jsonContent = JsonConvert.SerializeObject(new object {});
    tokenRequest.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
    // 添加请求头
    tokenRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    tokenRequest.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
    tokenRequest.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
    

完整修正代码:

var handler = new HttpClientHandler
{
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
using HttpClient client = new HttpClient(handler);

var tokenRequest = new HttpRequestMessage(HttpMethod.Post, url);
var jsonContent = JsonConvert.SerializeObject(new object {});
tokenRequest.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

tokenRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
tokenRequest.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
tokenRequest.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));

var tokenResponse = await client.SendAsync(tokenRequest);
tokenResponse.EnsureSuccessStatusCode();
var content = await tokenResponse.Content.ReadAsStringAsync();

验证方法:

可以先检查响应头的Content-Encoding字段,如果值为gzip或deflate,说明确实是压缩未处理导致的乱码,上述修复即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:15:56