Microsoft Graph API - 无法使用结尾进行过滤

问题描述 投票:0回答:3

要过滤 Microsoft Graph API 响应,文档建议使用

filter
查询选项。

这里我在

startswith
端点上使用了
endswith
'/me/messages'
字符串函数。

query = {
    '$filter': "
      startswith(from/emailAddress/address, 'abcd')
      or endswith(from/emailAddress/address, 'gmail.com')"
  }

仅使用

startswith
才能返回预期响应。将
endswith
函数添加到过滤器查询时,收到的响应是错误。

{
  "error": {
    "code": "ErrorInvalidUrlQueryFilter",
    "message": "The query filter contains one or more invalid nodes.",
    "innerError": {
      "request-id": "0d12e1f6-6105-4826-9656-8613f8c167ed",
      "date": "2019-03-14T11:05:56"
    }
  }
}
microsoft-graph-api
3个回答
6
投票

要将 $filter 与endsWith一起使用,您需要:

  1. 将 $count=true 添加到查询参数
  2. 添加 ConsistencyLevel:最终请求标头

示例:'https://graph.microsoft.com/v1.0/users?$count=true&ConsistencyLevel=eventual&$filter=endswith(mail,'@hotmail.com')'

**它适用于邮件和 userPrincipalName,但不适用于 displayName


0
投票

复制了这个完全相同的查询(在查询参数或标头参数中使用 ConsistencyLevel,但无法使其工作。我用来请求授权令牌的应用程序具有 Users.ReadWrite.All 权限和 User.Read。全部。

在邮递员中:

GET https://graph.microsoft.com/v1.0/users?$count=true&ConsistencyLevel=eventual&$filter=endswith(mail,'@hotmail.com')

{
    "error": {
        "code": "Request_UnsupportedQuery",
        "message": "Unsupported property filter clause operator 'SuffixMatch'.",
        "innerError": {
            "date": "2022-07-27T13:22:38",
            "request-id": "3f509514-4e77-4eb1-8557-0fe102d502f5",
            "client-request-id": "3f509514-4e77-4eb1-8557-0fe102d502f5"
        }
    }
}

----- 编辑 ------


刚刚在这里找到了我的答案:https://learn.microsoft.com/en-us/graph/query-parameters

Azure AD B2C 租户不支持使用 $count。


0
投票

Microsoft Graph 有一组棘手的 API 端点。 “endswith”仅适用于“mail”字段,不适用于其他字段。 “startswith”几乎适用于所有领域。 “包含”根本不起作用。

或者,您可以使用 $search,这可能有一些额外的功能

© www.soinside.com 2019 - 2024. All rights reserved.