c# - C# HttpClient 返回状态 WaitingForActivation
问题描述
我只有一种 Api Request 方法如下
private async Task<Site> getSiteAsync(string siteId)
{
Site site = null;
var response = await httpClient.SendAsync(
new HttpRequestMessage(HttpMethod.Get, httpClient.BaseAddress + $"api/sites/{siteId}"));
if (response.IsSuccessStatusCode)
{
var stream = await response.Content.ReadAsStreamAsync();
site = await JsonSerializer.DeserializeAsync<Site>(stream, serializerOptions);
}
return site;
}
当我尝试从我的 MainClass 调用它时,第一个调用 (a) 工作正常,但是 b、c 和 d 它们都返回给我Status
= WaitingForActivation
。
private readonly HttpClient httpClient = new HttpClient();
private readonly JsonSerializerOptions serializerOptions = new JsonSerializerOptions();
public MainWindow()
{
httpClient.BaseAddress = new Uri($"http://localhost:5000/MyApi/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
serializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
var a = getSiteAsync("0001"); << I only get the value of this call.
var b = getSiteAsync("0002");
var c = getSiteAsync("0003");
var d = getSiteAsync("0004");
InitializeComponent();
}
我怎样才能得到 b,c 和 d 的结果?
解决方案
您应该等待调用,因为您只能在async
方法中而不是在构造函数中执行此操作,您应该将代码移动到方法或事件处理程序:
public MainWindow()
{
httpClient.BaseAddress = new Uri($"http://localhost:5000/MyApi/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
serializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
Loaded += async (s, e) =>
{
var a = await getSiteAsync("0001");
var b = await getSiteAsync("0002");
var c = await getSiteAsync("0003");
var d = await getSiteAsync("0004");
};
InitializeComponent();
}
推荐阅读
- android - 如何在 SQLite RoomDatabase 中自动生成时间戳?
- ios - 显示两个导航栏
- python - 通过仅保留所有数组中存在的数字来过滤一组数组?
- django - Django迁移以从数据库中删除行
- c++ - 如何在 C++ 中使用 XOR 解密文件?
- android - Genymotion 保存 Android 虚拟设备的快照
- python - lambda和python中的多个嵌套ifs
- javascript - 当提供动态数据时,如何在 react-bootstrap 手风琴之间留出空间?
- r - 将化石尖端添加到树上
- node.js - 从 github 下载任何项目后 npm install 失败