向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子句会导致请求成功。
答案 0 :(得分:3)
这是intentional (and breaking) change,用于解决过滤的主要问题。 $orderby
仍然非常重要。
要总结该链接,请在请求中同时使用$orderby
和$filter
:
$orderby
中的任何字段也必须位于$filter
。$filter
事项中的字段顺序:
$orderby
的字段必须位于$filter
的第一位,且必须处于相同的顺序。$orderby
以外的字段必须位于$orderby
中的字段之后。因此,根据这些指南,您的请求存在的问题是flag/dueDateTime/dateTime
中不存在$filter
。