【发布时间】:2021-03-25 17:35:43
【问题描述】:
我正在制作一个基本的 POST 以从 API 接收身份验证令牌。 我的代码通过按下按钮启动任务。
Task<DataClass.AuthenticationToken> token = GetAuthTokenAsync(tbUsername.Text.Trim(), tbPassword.Text.Trim());
任务应该在“dataclass”中定义的数据结构中返回我的令牌信息
private async Task<DataClass.AuthenticationToken> GetAuthTokenAsync(string username, string password)
{
string requestURL = DataClass.CloudAPIBaseURL + DataClass.CloudTokenURL;
HttpClient client = new HttpClient();
HttpResponseMessage response = new HttpResponseMessage();
DataClass.AuthenticationRequest request = new DataClass.AuthenticationRequest
{
username = username,
password = password
};
DataClass.AuthenticationToken token = new DataClass.AuthenticationToken();
// Post request
response = await client.PostAsJsonAsync(requestURL, request);
//never gets here!!!
// I will complete coding once I get the response.
//string statusCode = response.StatusCode.ToString();
return token;
}
使用 Fiddler,我看到我的 POST 发出,并且响应包含正确的授权数据。 由于某种原因,异步等待没有返回。
【问题讨论】:
-
您是否了解
client.PostAsJsonAsync(requestURL, request)所击中的内容?如果它是你的,你需要调试它,看看为什么它永远不会返回。您的 await 只是在完成它的工作并等待它完成。 -
您是否尝试将 HttpClient 的
Timeout设置为 1 或 2 秒(default 为 100!)?它的行为方式是否相同? -
调用
GetAuthTokenAsync后,你如何访问token的结果?这对我来说似乎是一个可能的僵局。
标签: c# async-await task