我正在尝试使用 Microsoft Graph 查询 Azure Active Directory 用户信息。我可以很好地进行身份验证,但是当我尝试查询用户信息时client.Users
我的应用程序无限期挂起:没有超时,没有错误,只是挂起。我发现这个帖子 https://stackoverflow.com/questions/55105321/microsoft-graph-getasync-hangs-indefinitely然而那里的建议对我没有帮助。
public bool GetUserByUniqueID(string uid, out GraphUser user)
{
bool ret = false;
user = new GraphUser();
if (Authenticate(out AuthToken token))
{
GraphServiceClient client = GetGraphServiceClient(token);
// The below code hangs indefinitely
User user = client.Users[uid].Request().Select(GraphProperties).GetAsync().GetAwaiter().GetResult();
if (user != null)
{
MapGraphUser(ret, user);
ret = true;
}
}
return ret;
}
private bool Authenticate(out AuthToken token)
{
bool ret = false;
token = new AuthToken();
string url = $"https://login.microsoftonline.com/{_tenant}/oauth2/v2.0/token";
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.POST);
request.Parameters.Add(new Parameter("grant_type", _grantType, ParameterType.GetOrPost));
request.Parameters.Add(new Parameter("scope", _scope, ParameterType.GetOrPost));
request.Parameters.Add(new Parameter("client_secret", _clientSecret, ParameterType.GetOrPost));
request.Parameters.Add(new Parameter("client_id", _clientId, ParameterType.GetOrPost));
IRestResponse response = client.Execute<AuthToken>(request);
if (response.StatusCode == HttpStatusCode.OK)
{
token = JsonConvert.DeserializeObject<AuthToken>(response.Content);
ret = true;
}
return ret;
}
更新 2019 年 5 月 2 日
将 Microsoft.Graph 和 Microsoft.Graph.Core 恢复到版本 1.12 允许我调用.GetAwaiter().GetResult()
在同步上下文中。
更新 11/18/2020
我已重构我的代码,以将异步/等待模式与最新版本的 Microsoft.Graph 和 Microsoft.Graph.Core 结合使用。
public async Task<GraphUser> GetUserByUniqueID(string uid)
{
GraphUser ret = new GraphUser();
if (Authenticate(out AuthToken token))
{
GraphServiceClient client = GetGraphServiceClient(token);
User user = await client.Users[uid].Request().Select(GraphProperties).GetAsync();
if (user != null)
{
MapGraphUser(ret, user);
ret.Found = true;
}
}
return ret;
}