How to make HttpClient ignore Content-Length header(如何让HttpClient忽略内容长度报头)
本文介绍了如何让HttpClient忽略内容长度报头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用HttpClient与我无权访问的服务器通信。有时,来自服务器的JSON响应会被截断。当内容长度标头小于应有的长度(8192比8329)时,就会出现问题。这似乎是服务器上的一个错误,它提供的内容长度标头比响应正文的实际大小要小。如果我使用Google Chrome而不是HttpClient,则响应始终是完整的。 因此,我想让HttpClient忽略错误的内容长度报头,并读到响应的末尾。有可能做到吗?任何其他解决方案都很受欢迎。谢谢!
这是我的HttpClient的代码:
var client = new HttpClient();
client.BaseAddress = new Uri(c_serverBaseAddress);
HttpResponseMessage response = null;
try
{
response = await client.GetAsync(c_serverEventApiAddress + "?location=" + locationName);
}
catch (Exception e)
{
// Do something
}
var json = response.Content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject<JObject>(json); // The EXCEPTION occurs HERE!!! Because the json is truncated!
编辑1:
如果我使用HttpWebRequest,它可以完全读到JSON响应的末尾,而不会进行任何截断。但是,我想使用HttpClient,因为它有更好的异步/等待功能。
这是使用HttpWebRequest:
的代码var url = c_serverBaseAddress + c_serverEventApiAddress + "?location=" + "Saskatchewan";
var request = (HttpWebRequest)WebRequest.Create(url);
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
var response = (HttpWebResponse)request.GetResponse();
StringBuilder stringBuilder = new StringBuilder();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string line;
while ((line = reader.ReadLine()) != null)
{
stringBuilder.Append(line);
}
}
var json = stringBuilder.ToString(); // COMPLETE json response everytime!!!
推荐答案
您可以尝试指定响应内容的缓冲区大小
var client = new HttpClient();
client.MaxResponseContentBufferSize = <your_buffer_size>;
其中,属性MaxResponseContent BufferSize表示:
获取或设置读取响应内容时要缓冲的最大字节数。
这篇关于如何让HttpClient忽略内容长度报头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何让HttpClient忽略内容长度报头
猜你喜欢
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 使用 rss + c# 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01