【发布时间】:2020-03-03 10:17:21
【问题描述】:
我正在尝试使用 C# 从开放 API 获取数据。
在下面的代码中,我设法创建了一个 HttpClient 对象,但我无法获得 http 响应。我有一些Console.Writeline() 来帮助我定位错误,我打印的最后一件事是
创建的 HTTP 客户端
所以我似乎没有得到回应。谁能告诉我怎么回事?
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace CodeTesting
{
public class Parser
{
public Parser()
{
Console.WriteLine("Created parser");
GetQuestion();
}
public static async void GetQuestion()
{
Console.WriteLine("INSIDE GETQUESTION");
string baseUrl = "https://opentdb.com/api.php?amount=10&category=15&difficulty=easy";
try
{
using (HttpClient client = new HttpClient())
{
Console.WriteLine("Created HTTPClient");
using (HttpResponseMessage res = await client.GetAsync(baseUrl))
{
Console.WriteLine("GOT HTTP RESPONSE");
using (HttpContent content = res.Content)
{
Console.WriteLine("RETRIEVING CONTENT");
var data = await content.ReadAsStringAsync();
if (data != null)
{
Console.WriteLine("data------------{0}", data);
}
else
{
Console.WriteLine("NO Data----------");
}
}
}
}
}
catch (Exception exception)
{
Console.WriteLine("Exception Hit------------");
Console.WriteLine(exception);
}
}
}
}
【问题讨论】:
-
您是遇到错误还是根本没有继续执行
Console.WriteLine(("GOT HTTP RESPONSE");)步骤?您的程序可能只是在等待响应。您是否尝试过在await client.GetAsync(baseurl)行设置断点? -
您的代码永远不会等待
GetQuestion()完成。最有可能的是,它在收到响应之前终止。 不要在构造函数中调用异步方法 -
async void仅用于事件处理程序,不能等待。将async Task用于不返回数据的异步方法。 -
尝试删除“等待”。 await 将阻塞直到连接关闭,而不是当您收到响应结束时。服务器没有关闭连接,所以你被阻止了。
标签: c# json api httpclient