如何从IGraphServiceClient对象获取用户?

时间:2019-02-05 16:03:08

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

我有一个 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”。标头和QueryOptions为空。 (计数= 0)

(在上述方法中)

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

我例外。

  

Request_ResourceNotFound

     

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

     在Microsoft.Graph.HttpProvider.SendAsync中的

(HttpRequestMessage请求,HttpCompletionOption completeOption,CancellationToken cancelledToken)      在Microsoft.Graph.BaseRequest.SendRequestAsync(Object serializableObject,CancellationToken cancelToken,HttpCompletionOptioncompleteOption)      在Microsoft.Graph.BaseRequest.SendAsync [T](对象serializableObject,CancellationToken cancelToken,HttpCompletionOptioncompleteOption)      在Microsoft.Graph.UserMemberOfCollectionWithReferencesRequest.GetAsync(CancellationToken cancelledToken)      在C:\ workspace \ xxx \ xxx.xxx \ xxx.xxx.Core \ BusinessComponent \ GraphBC.cs:line 50上的xxx.xxx.BusinessComponent.GraphBC.GetUserGroupsAsync(ICollection`1 userIds)

您有一个主意,我应该去哪里解决此问题?

谢谢您的帮助! 弗兰克

1 个答案:

答案 0 :(得分:0)

解决方案是不使用电子邮件,而是使用名为ObjectId的属性进行安装。 (以GUID代替电子邮件)