错误消息:为资源“用户”的属性“用户类型”指定的查询过滤器子句不受支持或无效 Microsoft Graph SDK Filter

问题描述

我是Microsoft Graph API / SDK,用于从Azure Active Directory检索用户。我的Filter()函数给我错误消息:为资源“用户”的属性“用户类型”指定的查询过滤子句不受支持或无效。

我的代码是:

var azureUsers = await graphClient
              .Users
              .Request().Filter("startsWith(userType,'P')")
              .Select(x => new
              {
                x.Id,x.UserType,x.DisplayName,x.GivenName,x.Surname,x.UserPrincipalName,x.AccountEnabled,x.Identities,x.BusinessPhones,x.JobTitle,x.MobilePhone,x.OfficeLocation,x.PreferredLanguage,x.Mail,x.Extensions,x.CreatedDateTime
              })
              .GetAsync();

它绝对可以正常工作

.Filter("startsWith(mail,'P')")

但没有用户类型。

我的Azure AD中具有此属性UserType

我们的来宾用户大约有700位,我想将他们排除在通话之外。

它给我正确的值

        x.UserType,

但是我想在Call中过滤它。任何帮助将不胜感激。

解决方法

您可以使用以下代码获取没有来宾用户的用户列表,并且根据文档用户类型应该是member或guest。请参考document

enter image description here

 public static async Task ListUsers(GraphServiceClient graphClient)
            {
                Console.WriteLine("Getting list of users...");
                // Get all users (one page)
                var result = await graphClient.Users
                    .Request()
                    .Select(e => new
                    {
                        e.DisplayName,e.Id,e.Identities
    
    
                    }).Filter($"usertype eq 'Member'")
                    .GetAsync();
    
                foreach (var user in result.CurrentPage)
                {
                    var directoryObject = await graphClient.DirectoryObjects[user.Id].Request()
                         
     .GetAsync();
                    Console.WriteLine(JsonConvert.SerializeObject(directoryObject));
                }
    
            }
,

您看到此错误,因为UserType属性不支持此过滤器-如错误消息所述。

根据一般经验,userType应该是MemberGuest 例外是当您正在同步本地Active Directory 。由于userType是Azure AD属性,因此已同步用户的值将为null。

如果可以安全地认为本地用户不是访客,则可以基于Azure AD用户的同步对象或云本地用户对其进行筛选。您可以通过查看onPremisesSyncEnabled属性来实现。对于同步用户,这将是真实的,对于云原生用户,它将为null。

如果将此属性与userType属性结合使用,则可以使用以下$ filter有效地仅检索非访客用户:

$filter=onPremisesSyncEnabled eq true OR userType eq 'Member'

您可以在同一页上查看马克的答案-How to filter users by userType = null?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...