Graph API 过滤器适用于 GraphExplorer 但不适用于 SDK

Graph API filter working on GraphExplorer however not working on SDK

这是怎么回事 https://graph.microsoft.com/v1.0/me/onenote/notebooks?filter=tolower(name) eq 'my notebook'

Screenshot from Graph Explorer

当我尝试在 C# 中编写相同的代码时,出现以下错误 代码:BadRequest 消息:无效的过滤器子句 内部错误: 附加数据: 日期:2020-09-02T20:01:24

我正在使用下面的代码。

var NoteBook = await GraphClient.Me.Onenote.Notebooks.Request().Filter($"name eq 'My Notebook'").GetAsync();

它不适用于 https://graph.microsoft.com/v1.0/me/onenote/notebooks?filter=tolower(name) eq 'my notebook'。您在 filter=xxx 之前错过了一个 $

正确的应该是https://graph.microsoft.com/v1.0/me/onenote/notebooks?$filter=tolower(displayName) eq 'my notebook'.

没有名为 name 的 属性。您可以得到结果,因为过滤器没有生效。您列出所有笔记本。正确的是 displayName.

但是在 SDK 中没有在笔记本 class 中定义的属性 name。这就是您在使用 SDK 时出现错误的原因。

在 SDK 中你应该使用这个代码:

var NoteBook = await graphClient.Me.Onenote.Notebooks.Request().Filter($"displayName eq 'My Notebook'").GetAsync();