我想根据我提供的对象 ID 获取组名称列表。例如,如果 id 是 5458409c-013f-40d6-8352-522654ae1422,那么我想获取该 id 的组名称,例如可以是“营销”。然而我总是回到错误的组。
这是我迄今为止的实现:
List<AccessGroup> accessGroups = new List<AccessGroup>();
try
{
foreach(var id in group_ids)
{
var page = await graph_client.Groups[id].Members.Request().GetAsync();
string group_name = "";
group_name = page.OfType<Group>().Select(x => x.DisplayName).FirstOrDefault();
while (page.NextPageRequest != null)
{
page = await page.NextPageRequest.GetAsync();
group_name = page.OfType<Group>().Select(x => x.DisplayName).FirstOrDefault();
}
accessGroups.Add(new AccessGroup { Id = id, Name = group_name });
}
}
catch (Exception ex)
{
Logger.Warning(ex.Message);
Logger.Warning("Error getting group name from azure security groups");
throw;
}
最佳答案
看起来您想要存储每个页面的第一个成员显示名称,但是 accessGroups.Add(new AccessGroup { Id = id, Name = group_name });
仅被调用一次。您应该将其添加到 while
block 中。
如果您只想获取第一个组成员的显示名称,那么您可以尝试如下操作:
async Task GetGroupFirstMemberDisplayName()
{
var members = (await client.Groups.Request().Select(g => g.Id).Expand("members($select=displayName)").GetAsync())
.Select(g => new { GroupId = g.Id, FirstMemberDisplayName = g.Members.OfType<Group>().FirstOrDefault()?.DisplayName });
foreach (var item in members)
{
Console.WriteLine($"Group {item.GroupId} first member display name: {item?.FirstMemberDisplayName ?? ""}");
}
}
如果您只想获取所有组的显示名称,那么您可以尝试以下操作:
async Task GetGroupDisplayNames()
{
var names = (await client.Groups.Request().Select(g => g.DisplayName).GetAsync())
.Select(g => g.DisplayName);
Console.WriteLine(string.Join(", ", names));
}
关于c# - 如何使用图形服务客户端根据azure Active Directory中的组ID获取组名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73879406/