图 API 过滤用户资源错误

Graph API Filtering on User Resource Error

我有以下代码:

var users = await graphClient.Users
            .Request()
            .Header("ConsistencyLevel", "eventual")
            .Select("DisplayName, Id, userType, employeeid, accountEnabled, companyName")
            .Filter("userType eq 'Member' AND employeeid ge ' '")
        
            .GetAsync();

在我将 AND companyName ge ' ' 添加到过滤器之前,它工作正常。完整的过滤器查询如下:

.Filter("userType eq 'Member' AND employeeid ge ' ' AND companyName ge ' '")

将 companyName 添加到过滤器时,出现错误:

Microsoft.Graph.ServiceException: '代码: Request_UnsupportedQuery 消息:为资源 'User'.

的 属性 'companyName' 指定的不支持或无效的查询过滤器子句

根据 Microsoft 文档 (https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0),此查询应该有效。

当我尝试过滤 accountEabled 时,同样的事情发生了。我怀疑如果我能修好一个,我就能修好另一个。我错过了什么吗?

需要注意的是,我正在连接到 GCC High Tenant for the Graph API,其中一些资源可能不受支持。关于可用于过滤的资源,我找不到 GCC High 的特定文档。我首先要确保我没有犯编码错误。

您应该将 $count=true 添加到您的查询中(我正在 graph explorer 中测试您的查询)

此查询无效

Unsupported or invalid query filter clause specified for property 'companyName' of resource 'User'.

https://graph.microsoft.com/v1.0/users?$filter=userType eq 'Member' AND employeeid ge ' ' AND companyName ge ' '

此查询有效(也适用于 header ConsistencyLevel=eventual)

https://graph.microsoft.com/v1.0/users?$count=true&$filter=userType eq 'Member' AND employeeid ge ' ' AND companyName ge ' '

Advanced query capabilities on Azure AD directory objects

对于 c# 代码,$count=true 你可以通过添加 QueryOption 来设置查询构建器,像这样:

var options = new List<QueryOption>();
options.Add(new QueryOption("$count", "true"));
var users = await graphClient.Users
            .Request(options)
            .Header("ConsistencyLevel", "eventual")
            .Select("DisplayName, Id, userType, employeeid, accountEnabled, companyName")
            .Filter("userType eq 'Member' AND employeeid ge ' '")
            .QueryOption("
            .GetAsync();

Query parameters to customize query