首页 > 解决方案 > 如何从 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:443/v1.0/users/my-email@compagny.com/memberOf ”。Headers并且QueryOptions是空集合。

在上述方法中,以下行引发异常:

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

异常消息如下:

Request_ResourceNotFound

资源“my-email@compagny.com”不存在或其查询的引用属性对象之一不存在。

在 Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancelToken) 在 Microsoft.Graph.BaseRequest.SendRequestAsync(Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption) 在 Microsoft.Graph.BaseRequest.SendAsync[T](Object serializableObject , CancellationToken cancelToken, HttpCompletionOption completionOption) 在 Microsoft.Graph.UserMemberOfCollectionWithReferencesRequest.GetAsync(CancellationToken cancelToken) 在 xxx.xxx.BusinessComponent.GraphBC.GetUserGroupsAsync(ICollection`1 userIds) 在 C:\workspace\xxx\xxx.xxx\xxx.xxx .Core\BusinessComponent\GraphBC.cs:第 50 行

有谁知道我应该在哪里解决这个问题?

标签: asp.net-coreasp.net-core-webapi

解决方案


解决方案是不使用电子邮件,而是使用ObjectId属性(GUID 而不是电子邮件)。


推荐阅读