在 Graph API 中使用组查询成员展开

mat*_*d91 1 c# microsoft-graph-api graphserviceclient

我正在尝试构建一个查询,在其中传递 groupId 参数,并使用 C# 中的 GraphServiceClient 作为回报获取所有用户及其组成员身份。

我能够在一个查询中获取用户和组成员身份,并且能够在单独的查询中通过 groupId(但没有组成员身份)获取所有用户。但我无法将这两个查询合并为一个结果。是否可以?

这是我获取用户及其组成员身份的代码(使用带有 memberOf 的扩展):

var users = await _graphServiceClient.Users
                .Request()
                .Filter(graphFilter) // used for searching on givenName and surname
                .Select($"givenName,surname,mail,mobilePhone,id,userPrincipalName")
                .Expand(e => e.MemberOf)
                .GetAsync();
Run Code Online (Sandbox Code Playgroud)

这是我的代码,用于获取给定组中的用户:

var users = await _graphServiceClient
            .Groups[groupId] // Id of the group I want to get users from
            .Members
            .Request()
            .Select($"givenName,surname,mail,mobilePhone,id,userPrincipalName")
            //.Expand(e => e.MemberOf) // e is a DirectoryObject, so this does not compile.
            //.Expand(e => (e as Microsoft.Graph.User).MemberOf)
            //.Expand("memberOf")
            .GetAsync();
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决我的案子吗?我目前正在研究一种新方法,在从 /users 请求时是否可以在过滤器中使用 MemberOf,但我还不确定是否可能。

Oli*_*ver 5

使用以下查询在 Graph Explorer 中执行此操作:

GET https://graph.microsoft.com/v1.0/groups/{groupId}/members/microsoft.graph.user?$expand=memberOf
Run Code Online (Sandbox Code Playgroud)

为类型添加这个特殊参数会使用法有点复杂,但可以做到:

var url = serviceClient.Groups[groupId].Members.AppendSegmentToRequestUrl("microsoft.graph.user?$expand=memberOf");
var request = new HttpRequestMessage(HttpMethod.Get, url);
await serviceClient.AuthenticationProvider.AuthenticateRequestAsync(request);
var response = await serviceClient.HttpProvider.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)

V5 SDK 更新

目前的V5 SDK中直接支持该调用,方法如下:

var users = await serviceClient.Groups[groupToAdd].Members.GraphUser.GetAsync(config =>
    config.QueryParameters.Expand = new[] { "memberOf" });
Run Code Online (Sandbox Code Playgroud)