Azure Graph .Net SDK用户选择参数不区分大小写,但成员不区分大小写

rjjhvcjd  于 2023-02-06  发布在  .NET
关注(0)|答案(1)|浏览(139)

我使用.Net SDK多次调用Azure Graph API。
我们使用以下代码获取用户和相关选择:

var usersResponse = await _graphServiceClient.Users.GetAsync(request =>
            {
                request.QueryParameters.Select = new[]
                {
                nameof(User.DisplayName),
                nameof(User.Mail),
                nameof(User.PreferredLanguage)
                };
            }, cancellationToken: cancellationToken);

但是当查询一个组的所有成员时,我不能使用它,因为它会导致AdditionalData的空集,但是使用以小写字母开头的字符串值可以工作,所以我们必须使用下面的代码。

var usersResponse = await _graphServiceClient.Groups[azureGroupId].Members.GetAsync(request =>
            {
                request.QueryParameters.Select = new[]
                {
                    "displayName",
                    "mail",
                    "preferredLanguage"
                };
            }, cancellationToken: cancellationToken);

为什么我不能在Members调用中使用大写的nameof,但可以在Users调用中使用?

a64a0gku

a64a0gku1#

我尝试在Microsoft图形资源管理器和c#代码中重现并检查该方案。

在这里,用户可以查询***DirectObjects***,因此任何情况都可以解决。

但是对于一个组的成员,它必须首先查询其Odata类型为Microsoft.graph.user的directoryObjects,即;用户,然后选择参数,所以直接使用nameOf不是办法。

  1. nameof(系统.集合.泛型));以通用格式提供输出
    1.组可以将用户、组织联系人、设备、服务主体和其他组作为成员,因此不能是同一类型。
    查询:Get https://graph.microsoft.com/v1.0/groups/22290xxxxxx-0e5d051cda67/members?$select=DisplayName,Id,GivenName

在以下查询中,使用大写正确。

https://graph.microsoft.com/v1.0/groups/222zz67/members/microsoft.graph.user?$select=DisplayName,Id,GivenName

但直接选择参数无法提供所需的输出。列表成员是目录对象集合:group resource type - Microsoft Graph v1.0 | Microsoft Learn

对于成员,查询https://graph.microsoft.com/v1.0/groups/222xxxcda67/members?$select=displayName,id,givenName的小写字母工作正常

Header : ConsistencyLevel: eventual

和但与查询完美配合:

https://graph.microsoft.com/v1.0/groups/22xxxf-0xxx1cda67/members/microsoft.graph.user?$select=displayName,id,givenName

Header : ConsistencyLevel: eventual

您可以先获取成员,这将提供用户列表,然后您可以使用nameof()运算符。

这是我如何在我的API中使用:

var members = await _graphServiceClient.Groups["222xxxa67"].Members.Request().GetAsync();
        var users = new List<User>();
        users.AddRange(members.CurrentPage.OfType<User>());
        foreach (var user in users)
        {
            ViewData["ApiResult"] = nameof(user.DisplayName);
           
        }

"并得到了输出

相关问题