首页 > 解决方案 > 为什么 HttpClient.GetAsync() 缺少部分内容?

问题描述

Windows.Web.Http.HttpClientSystem.Net.Http.HttpClient收到不同的回应。

protected override void OnLaunched(LaunchActivatedEventArgs e) {
    var client = new Windows.Web.Http.HttpClient();
    var taskHttpResponse = client.GetAsync(new Uri(@"https://apis.live.net/v5.0/me?access_token=abcdefg"));
    Debug.WriteLine(taskHttpResponse.AsTask().Result.Content.ReadAsStringAsync().AsTask().Result);
}
{
  "error": {
  "code": "request_token_invalid", 
  "message": "The access token isn't valid."    } }

视窗RT

private static void Main() {
    var client = new System.Net.Http.HttpClient();
    var taskHttpResponse = client.GetAsync(new Uri(@"https://apis.live.net/v5.0/me?access_token=abcdefg"));
    Console.WriteLine(taskHttpResponse.Result.Content.ReadAsStringAsync().Result);
}
}  }  "message": "The access token isn't valid."

。网

你在跟我开玩笑吗?

标签: c#.netwpfuwp

解决方案


您不应该使用ReadAsStringAsync().Result该 make 可能导致 UI 中的死锁参见https://walterlv.github.io/post/deadlock-in-task-wait.html

我将您的代码更改为await可以得到结果。

在此处输入图像描述

而且我发现您的代码没有未经授权,我使用GetStringAsync的将是异常 401。我认为这个 api 不能在没有身份验证的情况下使用。


推荐阅读