Как узнать, что не так с асинхронным вызовом API в NET? - PullRequest
0 голосов
/ 15 апреля 2020

Я пишу веб-страницу .aspx, с VB в коде позади, которая должна извлекать информацию из API. Я написал весь код в соответствии с различными учебниками, преобразовывая из C# в VB по мере необходимости. Я нахожусь в точке, где мой класс GetAPIData выполняет вызов API (асинхронно) с использованием объекта HttpClient и возвращает управление веб-странице. Проблема в том, что я не могу получить какие-либо данные из свойства Result Задачи, возвращенного методом asyn c, и, что наиболее важно, я не вижу, что с ним не так.

Я убедился, что запрос GET с точно такими же параметрами, что и мой HttpClient, работает и возвращает данные в Postman. Я прошел через все свойства объекта HttpClient, чтобы убедиться, что они идентичны тем, которые я использовал в Postman. Я попытался проверить свойство Response запроса HttpClient.GetAsyn c, но когда я пытаюсь отладить это или поместить объект наблюдения в объект Response, он попадает в эту строку, но, кажется, никогда не запускается после этого, чтобы строки, которые определяют, является ли он успешным или нет (что я предполагаю, является результатом его асинхронности).

В коде, который вызывает метод asyn c, происходит что-то даже более странное. Если я пытаюсь проверить результат задачи, возвращаемый методом, он зависает с «ожиданием локального хоста» - и, очевидно, не запускает строку previous (простое сообщение пользователю, подтверждающее, что 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, и объект HttpClient, кажется, имеет все необходимые параметры, установленные в соответствии с моим успешным вызовом Postman.

Что мне нужно знать, так это как определить, что не так с моим вызовом API, из-за которого данные не возвращаются, и с отображением сообщения «ожидание локального хоста».

Я надеюсь, что предоставил достаточно информации; если нет, пожалуйста, дайте мне знать. И спасибо, что нашли время, чтобы прочитать это.

...