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

使用HttpClient调用Stack Exchange API时未返回正常JSON的问题

Stack Exchange API响应编码问题解决

浏览器访问https://api.stackexchange.com/2.3/questions?order=desc&sort=activity&site=stackoverflow能正常获取JSON,但用你提供的C#代码调用时,返回内容看似经过编码而非正常JSON,核心原因是Stack Exchange API默认返回gzip/deflate压缩后的内容——浏览器会自动解压这类响应,而你的HttpClient未开启自动解压功能,导致读取到的是压缩后的二进制转字符串内容。

解决方法很简单,在初始化HttpClient时,通过HttpClientHandler开启自动解压功能,同时支持GZip和Deflate两种压缩格式:

修改后的代码如下:

public class StackApi
{
    private const string BaseURI = "https://api.stackexchange.com/";
    private HttpClient _httpClient;

    public StackApi()
    {
        // 配置HttpClientHandler开启自动解压
        var handler = new HttpClientHandler
        {
            AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
        };
        
        _httpClient = new HttpClient(handler);
        _httpClient.BaseAddress = new Uri(BaseURI);
        _httpClient.DefaultRequestHeaders.Accept.Clear();
        _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }

    public async Task<string> GetQuestions()
    {
        var responseMessage =
            await _httpClient.GetAsync("2.3/questions?order=desc&sort=activity&site=stackoverflow");

        if (responseMessage.IsSuccessStatusCode)
        {
            var responseString = await responseMessage.Content.ReadAsStringAsync();
            return responseString;
        }

        return string.Empty;
    }
}

修改后,HttpClient会自动识别响应的压缩格式并完成解压,你就能拿到正常的JSON响应内容了。

内容的提问来源于stack exchange,提问作者Linda Lawton - DaImTo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:15:40