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

时间:2018-09-07 11:09:10

标签: c# httpclient chunked-encoding

我有发送HttpRequest并获取字符串json的代码。该代码可以正常工作,但是当服务器启动secret_base_key时,它包含菱形和不可读的字符串,我尝试使用缓冲区并将文本读入stringBuilder,但效果不佳。我在一些答案中看到HttpWebRequest已过时,应该使用HttpClient。我已经在HttpClient中重写了我的代码,但问题仍然相同。我在浏览器中打开了url,并且工作正常,加载过程花了几秒钟,而且看不到传输编码的Chunked。

请检查代码,

sending tranfer-encoding chunked response

我已经应用了8192字节的缓冲区并从SO读取,因此无法使用此代码,并且在过去的几个小时中尝试了许多来自SO的代码。请检查我的代码有什么问题。我可以在标头中设置一些内容,以便对成块的html简单说不,还是可以从响应中读取成块的html。

enter image description here

1 个答案:

答案 0 :(得分: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);

}