向 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 子句将导致请求成功。
这是一个有意(并且是破坏性)的更改,旨在解决过滤的主要问题。
$orderby
仍然很重要。
从该链接总结一下,如果您在请求中同时使用
$orderby
和 $filter
:
$orderby
中的任何字段也必须位于$filter
中。$filter
中的字段顺序很重要:
$orderby
中的字段必须在 $filter
中排在第一位,并且顺序必须相同。$orderby
中的字段必须位于 $orderby
中的字段之后。因此,根据这些准则,您的请求的问题在于
flag/dueDateTime/dateTime
不存在于 $filter
中。