我有一个webapi服务,这个服务的控制器正在调用一个远程webapi来获取数据。
我有一个示例控制器,它具有以下测试方法:
[HttpGet("activity")]
public ActionResult<BoredAPIDM> GetActivity()
{
Processor pr = new Processor();
object data = pr.GetActivity();
Debug.WriteLine(data); // Breakpoint
return Ok();
}
处理器类具有以下方法:
public async Task GetRemoteActivity()
{
string baseURL = $"https://www.boredapi.com/api/activity";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseURL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("activity");
if (response.IsSuccessStatusCode)
{
string result = response.Content.ReadAsStringAsync().Result;
DataTable dt = JsonConvert.DeserializeObject<DataTable>(result);
}
else
{
Debug.WriteLine($"Error calling the API from {baseURL}");
}
}
}
因此,我期待的是GetRemoteActivity()方法中的数据内容,但是它没有进入GetActivity()方法,并且调试行上的断点显示:
Id = 117, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
我觉得我遗漏了一个完整的观点,这是什么?
发布于 2022-03-10 23:52:38
这里少了很多,所以我试着帮你把它分解一下:
object data = pr.GetActivity();
应该调用GetRemoteActivity
吗?var data = await pr.GetRemoteActivity(); // prefix the current method with async
public async Task GetRemoteActivity()
不返回DataTable
.public async Task<DataTable> GetRemoteActivity()
using (var client = new HttpClient())
应该是一个单例,从不在每个方法调用中更新。DataTable dt = JsonConvert.DeserializeObject<DataTable>(result);
您确定这将正确绑定到JSON吗?我对此深表怀疑,但请检查API响应。这可能需要一个与响应匹配的单独的DTO。调试器返回
await
。Awaitable调用延迟加载,直到执行适当的等待时才执行。https://stackoverflow.com/questions/71431375
复制相似问题