之前正常工作的 Microsoft Graph 请求出现低效过滤错误

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

向 MS Graph 发出以下请求以检索按截止日期排序的标记消息:

https://graph.microsoft.com/beta/me/messages?$filter=flag/flagStatus%20eq%20%27flagged%27&$orderby=flag/dueDateTime/dateTime%20desc&$top=100

之前会成功并返回预期结果。最近有部分用户收到如下回复:

{
  "error": {
    "code": "InefficientFilter",
    "message": "The restriction or sort order is too complex for this operation.",
    "innerError": {
      "request-id": "5ef714c9-39a0-4167-a4d0-3682dcb46de4",
      "date": "2016-11-17T16:41:16"
    }
  }
}

图中是否引入了错误?

奇怪的是,这个请求以前还好,现在看来效率低下。它也只发生在某些用户的帐户上。

以下检索按接收日期排序的电子邮件附件的请求也出现了同样的问题:

https://graph.microsoft.com/v1.0/me/messages?$filter=hasAttachments%20eq%20true&$orderby=receivedDateTime%20desc&$expand=attachments($select=name,contentType,size,lastModifiedDateTime)&$top=6

现在得到相同的 InefficientFilter 错误响应。请注意,第二个请求是针对 v1.0 API 的,因此这不限于 beta。

另请注意,删除受影响帐户上的 orderby 子句将导致请求成功。

office365 microsoft-graph-api office365-restapi azure-ad-graph-api
1个回答
22
投票

这是一个有意(并且是破坏性)的更改,旨在解决过滤的主要问题。

$orderby
仍然很重要。

从该链接总结一下,如果您在请求中同时使用

$orderby
$filter

  1. $orderby
    中的任何字段也必须位于
    $filter
    中。
  2. $filter
    中的字段顺序很重要:
    1. 也在
      $orderby
      中的字段必须在
      $filter
      中排在第一位,并且顺序必须相同。
    2. 不在
      $orderby
      中的字段必须位于
      $orderby
      中的字段之后。

因此,根据这些准则,您的请求的问题在于

flag/dueDateTime/dateTime
不存在于
$filter
中。

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