Как получить пользователя из объекта IGraphServiceClient?

У меня есть метод POST и я хочу получить пользователя из объекта IGraphServiceClient (graph.microsoft). Метод GET работает отлично. Затем я беру пользователя из этого списка и устанавливаю его в качестве параметра для моего метода POST.

    public async Task<Dictionary<string, List<string>>> GetUserGroupsAsync(ICollection<string> userIds)
    {
        var aggregatedUserGroupMap = new Dictionary<string, List<string>>();
        foreach (string userId in userIds)
        {
            try
            {
                var userMemberOfCollectionRequest = graphServiceClient.Users[userId].MemberOf.Request();
                var userMemberOfCollection = await userMemberOfCollectionRequest.GetAsync().ConfigureAwait(false);
                if (!aggregatedUserGroupMap.ContainsKey(userId)) { aggregatedUserGroupMap.Add(userId, new List<string>()); }
                foreach (var memberOf in userMemberOfCollection) { aggregatedUserGroupMap[userId].Add(memberOf.Id); }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        return aggregatedUserGroupMap;
    }

Значением входящего объекта userIds является адрес электронной почты пользователя, скопированный из результата GET. Объект (первая строка в методе) userMemberOfCollectionRequest выглядит нормально. RequestUrl в нем содержит " https://graph.microsoft.com/v1.0/users/my-email@compagny.com/memberOf". Заголовки и QueryOptions пусты. (количество = 0)

При вызове (в методе выше)

var userMemberOfCollection = await userMemberOfCollectionRequest.GetAsync().ConfigureAwait(false);

Я получаю исключение.

Request_ResourceNotFound

Ресурс 'my-email@compagny.com' не существует или один из его запрашиваемых объектов ссылочных свойств отсутствует.

в Microsoft.Graph.HttpProvider.SendAsync(запрос HttpRequestMessage, завершение опции HttpCompletionOption, CancellationToken cancellationToken) в Microsoft.Graph.BaseRequest.SendRequestAsync (объект serializableObject, объект для CancellationTextObject.Ognation.Ognation.Ognation.Ognation.Ognation.Ognation.Ognation.Object.Ognation.Ognation.Object.Ognation.Ognation.Ognation.Object.Ognation.Ognation.Object.Ompject.OgnationToctionOntject.OctionOntject_ObjectSigner.ObjectSigner.Ontject_TectionOpt_CectionOntic_TectionOntic_TectionOntic_TectionOnt).)., CancellationToken CancellationToken, HttpCompletionOption completionOption) в Microsoft.Graph.UserMemberOfCollectionWithReferencesRequest.GetAsync(CancellationToken CancellationToken) в xxx.xxx.BusinessComponent.GraphBC.GetUserGroupsAsync(ICollection`1 UserIds) в C:\ рабочее пространство \ ххх \xxx.xxx\xxx.xxx.Core\BusinessComponent\GraphBC.cs: строка 50

У вас есть идея, где я должен искать, чтобы решить эту проблему?

Спасибо за помощь! Фрэнк

1 ответ

Решением было не использовать электронную почту, а использовать свойство ObjectId. (GUID вместо электронной почты)

Другие вопросы по тегам