gpt4 book ai didi

c# - Microsoft Graph API 调用无限期挂起

转载 作者:行者123 更新时间:2023-12-05 04:00:45 26 4
gpt4 key购买 nike

我正在尝试使用 Microsoft Graph 查询 Azure Active Directory 用户信息。我可以很好地进行身份验证,但是当我尝试查询用户信息 client.Users 时,我的应用程序无限期挂起:没有超时,没有错误,只是挂起。我找到了 this post但是那里的建议对我没有帮助。

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()

2020 年 11 月 18 日更新

我重构了我的代码以使用最新版本的 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;
}

最佳答案

我遇到了同样的问题。我在某处的另一篇文章中发现它与等待一次完成的两个任务有关。我现在找不到那篇文章了。

对我来说 .GetAwaiter().GetResult();在计划的工作中工作,但不是作为手动按钮按下任务。

作为玩弄它的结果。对我有用的是 用 await 替换 .GetAwaiter().GetResult()。(我不确定为什么会修复它,但确实如此)

来自:

var results = graphServiceClient.Users[uid].Request().GetAsync().GetAwaiter().GetResult();

收件人:

var results = await graphServiceClient.Users[uid].Request().GetAsync();

希望这对以后的人有帮助

关于c# - Microsoft Graph API 调用无限期挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55944518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com