【发布时间】:2022-11-13 13:21:25
【问题描述】:
我无法在此 http 客户端调用中获取正文内容,因为我无法弄清楚如何在此异步方法中获取请求的实际内容。
这是异步方法:
public async Task<HttpResponseMessage> AuthenticateUser(string username, string password)
{
var client = new HttpClient();
var requestUri = new Uri($"{_authorityBaseUrl}/{_tenantID}/oauth2/token");
var authenticationBody = CreatePasswordGrantConsent(username,password);
return await client.PostAsync(requestUri, authenticationBody);
}
这是我想从中获取正文内容的方法
protected void loginBtn_Click(object sender, EventArgs e)
{
AADConnector connector = new AADConnector();
var result = connector.AuthenticateUser("username", "password").Result.Content;
}
我尝试在 AuthenticateUser 方法中更改为:
public async Task<string>(string username , string password)
{
...
...
var response = await client.PostAsync(requestUri, authenticationBody);
var contents = await response.Content.ReadAsStringAsync();
return contents;
}
并将 loginBtn_Click 更改为:
AADConnector connector = new AADConnector();
Task<string> result = connector.AuthenticateUser("username","password");
var finalResult = result.Result;
但它只是死锁它会一直运行下去。
你们能解释一下为什么会这样吗?
【问题讨论】:
-
使
loginBtn_Click处理程序异步和var finalResult = await connector.AuthenticateUser("username","password");-- 您应该将 HttpClient 对象声明并初始化为静态字段(static Lazy<HttpClient>更好,但初始化有很大不同)
标签: c# asynchronous