【发布时间】:2018-07-23 22:16:39
【问题描述】:
我正在尝试从 Web API 获取 JSON 响应。
我能够使用类似代码在控制台应用程序中检索响应,但是在 UWP 中 await httpClient.GetAsync(uri); 无法按预期工作。
public static async Task<double> GetJson()
{
using (var httpClient = new HttpClient())
{
Uri uri= new Uri("https://api.cryptonator.com/api/ticker/btc-usd");
HttpResponseMessage response = await httpClient.GetAsync(uri);
//Below code is not relevent since code is failing on await
var result = response.Content.ReadAsStringAsync();
var jsonResponse = Json.ToObjectAsync<ExchangeRate>(result);//
jsonResponse.Wait();//
ExchangeRate exchangeRateObj = jsonResponse.Result;//
return 1.2;//
}
}
背后的代码:
private void Button_Click(object sender,RoutedEventArgs e){
var ROC__ = MyClass.GetJson();
ROC__.Wait();
currency_.ROC = ROC__.Result;
}
这里不起作用是什么意思?
它应该连接到 URL 并获取响应,并且应该为响应分配一些值。而是在使用 step into 或 Continue 进行调试时,控件退出当前行也会跳过后续行。 (我也已经在下一行进行了调试),应用程序只是冻结了。
我在 Stackoverflow 和其他博客上使用 HTTPClient 引用了类似的 JSON 解析代码,建议使用 System.Net.Http 或 Windows.Web.Http
相关问题: how-to-get-a-json-string-from-url
我认为任务正在运行并且它一直处于等待模式,这看起来很奇怪,因为调试模式不显示正在运行的代码,它只显示ready。也不例外。
我是做错了什么还是缺少一些 Nuget 参考资料?
请提出建议。
PS : 与httpClient.GetStringAsync 方法的情况相同。
在控制台应用程序上,这条线有效,但在 UWP 上无效
var json = new WebClient().DownloadString("https://api.cryptonator.com/api/ticker/btc-usd");
与httpclient-getasync-never-returns-on-xamarin-android不重复
- 它不是 Xamarin,虽然它是基于 C# 的,但我的代码不同,它不是我关心的 WebApiClient 或 GetInformationAsync 方法。
【问题讨论】:
-
为什么不同时等待
ReadAsStringAsync和ToObjectAsync? -
控制台应用程序没有同步上下文。请在你的 UWP 应用中添加调用
GetJson的方法 -
在 ReadAsStringAsync 上也尝试过等待,但不起作用。 GetJson() 方法已添加到 XAML 页面后面的代码中,
-
@CamiloTerevinto 他们seem to have 包含在 C# 7.1 中。
-
@Prateek 这是我内置到我的 UWP 库中的 HttpClient 的一个工作示例,并在一些不同的已发布和工作应用程序中具有 github.com/DotNetRussell/UWPLibrary/blob/master/BasecodeLibrary/…
标签: c# uwp dotnet-httpclient