vb.net - 如何找出 .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 调用出了什么问题,以及显示“等待本地主机”消息。
我希望我已经提供了足够的信息;如果没有,请告诉我。感谢您花时间阅读本文。
解决方案
推荐阅读
- sql-server - 更新触发器中的平均分数?
- javascript - 当键盘在本机反应中打开时,如何在文本输入下方显示组件?
- travis-ci - 如何上传 Lighthouse CI 结果作为 GitHub 状态检查?
- android - 无法在 Android 上启动项目:运行 adb 时出错:adb:运行 abb_exec 失败。错误:已关闭 adb:写入连接错误:已关闭
- flutter - 在颤振中清除文本字段时出现错误“getter 'year' was called on null”
- validation - 我需要获得互联网警报
- python - uwsgi:OSError:GET请求期间写入错误
- c# - 如何在 .Net 标准项目中使用 C# 代码列出 .NetStandard 库中的所有命名空间
- python - 创建 bin 并为该 bin 提取值
- c# - 如何在凭据对话框中显示域名(使用 CredUIPromptForWindowsCredentials)?