具有块数据的HttpClient无法正常工作

时间:2015-12-28 09:30:18

标签: c# uwp dotnet-httpclient

当我在Firefox / IE中执行查询时,我得到了完整的响应;但当我用HttpClient执行相同的请求时,我只得到了一部分。我不明白为什么。

显然数据被分块,这就是我指定ResponseContentRead的原因。

var requestUri = "https://api.guildwars2.com/v2/continents/1/floors/1";

HttpClient httpClient = new HttpClient();

var request = new HttpRequestMessage();
request.Method = HttpMethod.Get;
request.RequestUri = requestUri;

var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead);
var result = await response.Content.ReadAsStringAsync();

为什么Firefox / IE会返回正确的响应,而HttpClient会返回不完整的响应?

来自HttpClient的结果:

bad result

来自Firefox / IE的结果:

good result

代码位于C#UWP应用程序中。

1 个答案:

答案 0 :(得分:1)

我已成功运行您的代码并获得了整个json字符串。但是,我必须进行一些小修改才能使其正常工作:

var requestUri = new Uri("https://api.guildwars2.com/v2/continents/1/floors/1");

HttpClient httpClient = new HttpClient();

var request = new HttpRequestMessage();
request.Method = HttpMethod.Get;
request.RequestUri = requestUri;

var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead);
var result = await response.Content.ReadAsStringAsync();

注意requestUri被初始化为Uri实例而不是字符串实例。

此外,代码已在控制台应用程序中进行了测试。

编辑:这是我从通话中获得的一个粘贴。我已经美化了代码,使其更具可读性。也许它可以帮助您验证内容是否符合预期:Json result