是否有图API从AAD组中获取特定类型成员的计数?例如,考虑以下AAD组:

此组包含3个类型为“User”的成员。是否有一个图API只得到这个计数,即3?或者,我是否应该从组中获取所有成员并进行一些筛选,以获得“User”类型的成员,如下所示,并找出计数:
var users = new List<Guid>();
var response = await graphClient
.Groups[groupId]
.TransitiveMembers
.Request()
.GetAsync();
users.AddRange(ToUsers(response));
private IEnumerable<Guid> ToUsers(IEnumerable<DirectoryObject> members)
{
foreach (var directoryObj in fromGraph)
{
switch (directoryObj)
{
case User user:
yield return Guid.Parse(user.Id);
break;
default:
break;
}
}
}发布于 2022-09-25 08:15:00
要从AAD组获取特定类型的成员数,可以使用以下查询:
GET https://graph.microsoft.com/v1.0/groups/<group_id>/members/microsoft.graph.user/$count我尝试在我的环境中复制相同的结果,并得到了以下结果:
我创建了一个Azure广告组,其成员类型不同,如下所示:

我通过User图资源管理器( Graph )运行了以下查询,并成功地获得了以下类型成员的计数:
GET https://graph.microsoft.com/v1.0/groups/<group_id>/members/microsoft.graph.user/$count确保在运行查询时添加ConsistencyLevel : Eventual请求头。
响应:

通过选择代码段选项卡,您可以获得任何语言的代码,如下所示:

代码示例在C#中
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var int32 = await graphClient.Groups["groupID"].Members.$count
.Request()
.Header("ConsistencyLevel","Eventual")
.GetAsync();发布于 2022-09-26 06:15:57
首先,让我们看看图api示例,它与您的需求是相同的。它需要/members/microsoft.graph.user,但是Graph目前不支持通过派生类型进行筛选,这是一个已知的问题,参见本期。所以我们需要使用这样的代码:
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user");
var groupRequest = await new GraphServiceGroupsCollectionRequest(groupUrl, graphClient, null).GetAsync();
var userCount = groupRequest.Count;我们需要使用AppendSegmentToRequestUrl在请求中追加microsoft.graph.user,它对我起了作用。

顺便说一句,您可能也想添加/$count。因此代码应该如下所示:
var requestOptions = new List<HeaderOption>()
{
new HeaderOption("ConsistencyLevel", "eventual")
};
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user/$count");
var groupRequest = await new GraphServiceGroupsCollectionRequest(groupUrl, graphClient, requestOptions).GetAsync();但是它会抛出异常,因为响应是一个数字,而不是Group。因此,我们不能使用它,除非我们使用http客户端手动发送get请求,但它与图形SDK无关。不管怎样,我会在这里分享代码。
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var tokenRequestContext = new TokenRequestContext(scopes);
var token = clientSecretCredential.GetTokenAsync(tokenRequestContext).Result.Token;
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token );
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user/$count");
HttpResponseMessage response = await _httpClient.GetAsync(groupUrl);最后,请看下面的截图。因此,图资源管理器生成的代码片段是错误的。

https://stackoverflow.com/questions/73842602
复制相似问题