首页 > 解决方案 > 如何找出 .NET 中的异步 API 调用有什么问题?

问题描述

我正在编写一个 .aspx 网页,后面的代码中有 VB,它需要从 API 中提取信息。我已经根据各种教程编写了所有代码,并根据需要从 C# 转换为 VB。我的 GetAPIData 类使用 HttpClient 对象(异步)进行 API 调用并将控制权返回给网页。问题是我无法从异步方法返回的 Task 的 Result 属性中获取任何数据,最关键的是,我看不到它出了什么问题。

我已确保具有与我的 HttpClient 完全相同的参数的 GET 请求可以正常工作并在 Postman 中返回数据。我已经检查了 HttpClient 对象的所有属性,以确保它们与我在 Postman 中使用的属性相同。我试图检查 HttpClient.GetAsync 请求的 Response 属性,但是当我尝试调试它或监视 Response 对象时,它会到达该行,但似乎从未运行过该行确定它是否成功(我猜这是异步的结果)。

在调用异步方法的代码中,发生了更奇怪的事情。如果我尝试检查该方法返回的任务的结果,它会挂起“等待本地主机” - 并且显然没有运行一行(向用户发送一条简单消息,确认已进行 API 调用)。如果访问任务结果的行被注释掉,它之前的行将照常运行。就好像后来某些代码中的问题阻止了之前的代码运行,这对于习惯于同步编程的人来说似乎很奇怪(那就是我......我再次猜测这是由于我的方法是异步的。)

' dataTask is an object of type 'Task' which will contain a RespondentQuota in its Result property, when one is returned by the API call. 

' GetJobData asynchronously calls the API and returns a Task of type RespondentQuota

Dim dataTask = GetJobData(jobNo)

ShowMessage("GetJobData has run (is running?)")

'dataTask.result is an object of type RespondentQuota - if the line below is commented out, the previous ShowMessage runs, but if the line below is not commented out, the previous ShowMessage does not work

ShowMessage("projectId of RespondentQuota for jobNo " & jobNo.ToString & " is " & dataTask.Result.projectId)

通过调试我的代码,我已经能够确定正在进行 API 调用,并且根据我成功的 Postman 调用,HttpClient 对象似乎设置了所有必要的参数。

我需要知道的是,如何确定导致数据不返回的 API 调用出了什么问题,以及显示“等待本地主机”消息。

我希望我已经提供了足够的信息;如果没有,请告诉我。感谢您花时间阅读本文。

标签: vb.netapiasynchronousasync-awaithttpclient

解决方案


推荐阅读