以前正在运行的Microsoft Graph请求上的InefficientFilter错误

时间:2016-11-17 18:29:13

标签: office365 microsoft-graph office365-restapi azure-ad-graph-api

向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,因此不限于测试版。

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

1 个答案:

答案 0 :(得分:3)

这是intentional (and breaking) change,用于解决过滤的主要问题。 $orderby仍然非常重要。

要总结该链接,请在请求中同时使用$orderby$filter

  1. $orderby中的任何字段也必须位于$filter
  2. $filter事项中的字段顺序:
    1. 同样位于$orderby的字段必须位于$filter的第一位,且必须处于相同的顺序。
    2. $orderby以外的字段必须位于$orderby中的字段之后。
  3. 因此,根据这些指南,您的请求存在的问题是flag/dueDateTime/dateTime中不存在$filter