Я пытаюсь запросить информацию о пользователе через Microsoft Graph. Я могу хорошо аутентифицироваться, но когда я пытаюсь запросить информацию о пользователе graphServiceClient.Users
, мое приложение зависает на неопределенный срок: нет тайм-аута, нет ошибки, просто зависает. Я нашел этот пост однако предложения там не помогли мне.
Вот мой код:
public bool GetUserByUniqueID(string uid, out GraphUser user)
{
bool ret = false;
user = new GraphUser();
if (Authenticate(out AuthToken token))
{
GraphServiceClient graphServiceClient = GetGraphServiceClient(token);
// The below code hangs indefinitely
User graphUser = graphServiceClient.Users[uid].Request()
.Select("id,displayName,userPrincipalName,userType,accountEnabled").GetAsync().GetAwaiter()
.GetResult();
if (graphUser != null)
{
user.ID = graphUser.Id;
user.DisplayName = graphUser.DisplayName;
user.PrincipalName = graphUser.UserPrincipalName;
user.UserType = graphUser.UserType;
user.AccountEnabled = graphUser.AccountEnabled ?? false;
user.MemberOf = GetMemberOf(token, graphUser.Id);
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;
}