如何使用 Microsoft Graph .NET SDK 检索 OneNote 页面的内容?

How do I retrieve the content of a OneNote page using the Microsoft Graph .NET SDK?

我正在换掉我对旧 OneDrive SDK 的使用,以编程方式在 UWP 应用程序中访问 OneNote 的内容,并且我已经开始使用 Microsoft Graph for .NET SDK。我需要做的一件事是获取特定页面的内容。目前,我正在尝试这样做:

await _graphClient.Me.Onenote.Pages
    .Request()
    .Filter("tolower(title) eq 'shopping list'")                    
    .GetAsync();

...这有效,并为我提供了笔记本中标题为 "shopping list" 的所有页面。但是,所有这些页面都有 null Content 属性,让我无法获取这些页面的 HTML 内容。我可以验证这些页面中至少有一个确实在 OneNote 应用程序中包含内容。

我已经通读了 SDK 的文档,看来我应该得到一个 Stream 的回复,而无需任何进一步的操作。我是否遗漏了一个步骤,或者我是否错误地使用了 API?

可以按单个页面请求页面内容,例如:

GET https://graph.microsoft.com/v1.0/me/onenote/pages/{page-id}/content

可以像这样请求每个页面内容集合(通过 contentUrl 属性 of Page resource):

var result = await graphClient.Me.Onenote.Pages.Request().GetAsync();
foreach (var page in result)
{

     //download Page content
     var message = new HttpRequestMessage(HttpMethod.Get, page.ContentUrl);
     await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
     var response = await graphClient.HttpProvider.SendAsync(message);
     var content = await response.Content.ReadAsStringAsync();  //get content as HTML 

}

事实证明,SDK 支持直接获取单个页面的内容,但这样做的语法不是很容易发现。它是:

Stream pageContent = await _graphClient.Me.Onenote.Pages[page.Id]
    .Content // This could be omitted to retrieve every property on the page, presumably
    .Request()
    .GetAsync();

原来 _graphClient.Me.Onenote.Pages 返回的 IOnenotePagesCollectionRequestBuilder 支持 key-style 检索特定页面的索引。使用默认的 intellisense 下拉菜单完全找不到 =/