Это не проблема асинхронности, а проблема типа модели.(Хотя является асинхронной проблемой, которая может стать проблемой ... Не вызывайте .Result
напрямую, а вместо этого используйте await
для получения результата.)
Ваша модельэто строкаНо перегрузка для View()
, которая занимает вторую строку, использует ее для поиска именованного представления .Именно поэтому он ищет представление , называемое вашей длинной строкой JSON.(Ну, «главный вид» в данном случае , поскольку вы отправляете ему две строки.)
Не используйте строку в качестве модели.Используйте модель.Вместо того, чтобы посылать одну большую строку JSON на ваш взгляд, десериализуйте ее в какую-то модель.Тип зависит от вас, но десериализация может выглядеть примерно так:
var response = await client.GetAsync("employees");
YourModelTypeHere model = null;
if (response.IsSuccessStatusCode)
{
var responseString = await result.Content.ReadAsStringAsync();
model = JsonConvert.DeserializeObject<YourModelTypeHere>(responseString);
}
return View(model);
В result
может быть даже опция для чтения / десериализации вашей модели напрямую, сохраняя вам строку кода выше,Но общий принцип тот же.Используйте строго типизированные модели вместо сложных сериализованных строк.
* В этом случае YourModelTypeHere
выглядит так, как будто это будет IEnumerable<YourModel>
или, возможно, IList<YourModel>
, на основе сериализованного JSON, который мы используем.Наблюдение.
* Также обратите внимание, что при этом используется ваша текущая логика отправки пустой модели в то же представление, если ничего не было успешно получено.Для пустой строки, которая может быть в порядке, для null
это может стать проблематичным, в зависимости от того, что делает ваш взгляд.(В любом случае ваше представление должно будет измениться, если оно в настоящее время ожидает строку в качестве модели.) Возможно, перенаправить или вернуть ошибку в случае отсутствия доступной модели?Логика поведения вашей системы зависит от вас.