2

我正在使用 HttpRequestMessage/HttpResponseMessage 进行发布请求。一切正常,我将响应转换为长度正确的字符串,但如果我想显示原始字符串,它只返回一个问号字符(?),没有别的,好像输出只是一/两个字符的长度。

我尝试将字符串解码为 UTF8,还是一样。

这是我的代码:

var targetUrl = new Uri("https://www.targetUrl.com/");
var postData = GetPostData;
var request = httpClientHelp.GetRequest(HttpMethod.Post, targetUrl, postData);
var response = Await httpRequestProcess.SendAsync(request);
var data = Await response.Content.ReadAsStringAsync();
Debug.WriteLine(data.Length); // Correct, i.e. 5686
Debug.WriteLine(data); // Just displays "?"

//。这是 httpRequestProcess 类中的 SendAsync 函数:

public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage requestMessage)
{
    var response = await Client.SendAsync(requestMessage);
    return response;
}

这是原始字符串结果

这是字符串内容及其长度之间的区别

如果我复制那个问号,输出是一组未知字符,例如: � �</p>

4

1 回答 1

3

感谢@SachinVishwakarma,我能够解决这个问题。标头上的默认编码是“gzip, deflate, br”,如 Fiddler 中所示。我所要做的就是使用 HttpClientHandler 初始化 HttpClient,其 AutomaticDecompression 属性针对所有压缩方法进行了优化。

例子:

    var _httpHandler = new HttpClientHandler() { CookieContainer = new System.Net.CookieContainer(), AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.None };
    var _httpClient = new HttpClient(_httpHandler);

谢谢你们帮助我!

于 2019-08-07T12:36:27.827 回答