Я экспериментирую с асинхронным вызовом Azure Rest Api из модуля DNN (это для клиента, который использует платформу DNN и более старую версию, а именно 8.0). Мне нужен этот вызов для получения данных перед возвратом представления.
Я сделал контроллер asyn c, чтобы он "ожидал" получения данных из azure rest api.
Поведение неожиданное. Код останавливается в этой точке останова (как в окне браузера с пустым представлением появляется всплывающее окно, но код после этой точки не выполняется), и представление остается пустым и никогда не продолжается до кода, заполняющего модель представления для страницы:
var result = await httpClient.GetStringAsync(url);
Иногда результат (пользователь db) возвращается должным образом из db, но представление все еще пустое, даже если другие точки останова после ожидания были достигнуты в контроллере ... Представление кажется возвращенным до вызова ожидания завершено? Окно просмотра получает фокус до завершения ожидания, но представляет собой пустую страницу.
Любые предложения о том, что происходит, пожалуйста?
В классе контроллера DNN:
public async Task<ActionResult> Index() : DnnController
{
ViewModel pageVM = new ViewModel();
AuthenticationApi authService = new AuthenticationApi();
var outcome = await authService.GetDbUser(); // AWAIT
// populate the pageVM
.................
return View(pageVM);
}
В папке Services в классе AuthenticationApi:
public class AuthenticationApi
{
public async Task<DbUser> GetDbUser()
{
string url = "https://mywebservicename.azurewebsites.net/api/applicants/46";
var httpClient = new HttpClient();
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
try
{
var result = await httpClient.GetStringAsync(url);
return JsonConvert.DeserializeObject<DbUser>(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
}