首页 > 解决方案 > 从 C# 中的 Content-Encoding = Gzip / response 获取奇怪的字符

问题描述

我正在使用 C# 访问 API 并获取响应数据,例如:

�y%9z�Pu�i�99��uB�2KRS�KKR����L,I��Z�����]&7��(&��� �O�/�+)��   �+��

API 规范说它适用于 Gzip 内容编码。好吧,如果我使用完全相同的标头从 Postman 或 Powershell(Invoke-RestMethod) 发出请求,我可以清楚地看到 JSON 格式的信息,但不是 C#

public static void Test()
{
    using (var client = new System.Net.Http.HttpClient() { BaseAddress = new Uri("https://xxx/") }) {
        using (var request_ = new System.Net.Http.HttpRequestMessage())
        {
            var auth = GetAuthHeader();
            var agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36";

            request_.Headers.TryAddWithoutValidation("Accept", "application/json");
            request_.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip");
            request_.Headers.TryAddWithoutValidation("Authorization", auth);
            request_.Headers.TryAddWithoutValidation("Customer-Session-Id", Guid.NewGuid().ToString());
            request_.Headers.TryAddWithoutValidation("User-Agent", agent);
            request_.Method = new System.Net.Http.HttpMethod("GET");
            var url_ = "XXX";
            request_.RequestUri = new Uri(url_, UriKind.RelativeOrAbsolute);

            var response = client.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, System.Threading.CancellationToken.None).Result;
            var arr = response.Content.ReadAsStringAsync().Result;

            Console.WriteLine(response.ToString());
            Console.WriteLine(arr);
        }
  

我需要做一个额外的编码步骤吗?

标签: c#gzip

解决方案


推荐阅读