如何从C#HttpClient传输编码获取UTF8中的内容?

问题描述 投票:0回答:1

我有代码发送HttpRequest并在字符串中获取json。代码工作正常,但它包含菱形和不可读的字符串服务器启动时sending tranfer-encoding chunked response我试图使用缓冲区并将文本读入stringBuilder,但它不能正常工作。我在一些答案中读到HttpWebRequest已经过时,我应该使用HttpClient。我在HttpClient中重写了我的代码,但问题仍然存在。我在浏览器中打开网址,它工作正常,加载需要几秒钟,我没有看到转移编码Chunked。

请检查代码,

        HttpClientHandler handler = new HttpClientHandler();
        handler.CookieContainer = cookies;

        var client = new HttpClient(handler);

        var ans = client.GetAsync(strURL).Result;
        var resStream = ans.Content.ReadAsStringAsync().Result;

我已经应用了8192字节缓冲区并从SO读取,不能使用此代码并在过去几个小时内尝试了来自SO的许多代码。请检查我的代码中有什么问题。我可以在标题中设置一些简单的说不用分块的html或者有一种方法可以从响应中读取分块的html。

enter image description here

c# httpclient chunked-encoding
1个回答
0
投票

根据你的代码,返回的json不是字符串格式,它是字节数组?它与服务器端有关,服务器在发回之前是否对内容进行编码?对不起,我试图添加评论,但我的水平太低,我只能发布答案,希望我的一些想法可以帮助。

在我的项目,服务器端,我们使用下面的代码发送响应

public System.Net.Http.HttpResponseMessage GetServiceStatus()
{
    ......
    string sJsonRet = JsonHelper.Serialize(rspMsg);
    System.Net.Http.HttpResponseMessage resp = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK);
    resp.Content = new System.Net.Http.StringContent(sText,System.Text.Encoding.UTF8, "text/plain");
        return resp;        
}

客户端,你总是得到纯文本字符串,我们使用System.Net.WebClient。

 internal void GetServiceStatusCompleted(object sender, UploadStringCompletedEventArgs e){
......
   string response = e.Result;
   if ((response != null) && (response.Length > 0))
      status = (ServiceStatusMsg)JsonHelper.Deserialize(typeof(ServiceStatusMsg), response);

}

© www.soinside.com 2019 - 2024. All rights reserved.