Как получить содержимое страницы OneNote с помощью пакета SDK для Microsoft Graph .NET?

Я отказываюсь от использования старого OneDrive SDK для программного доступа к содержимому OneNote в приложении UWP и начал использовать Microsoft Graph для .NET SDK. Одна из вещей, которые мне нужно сделать, это получить содержимое определенной страницы. В настоящее время я пытаюсь сделать это следующим образом:

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

... который работает и дает мне все страницы в моей записной книжке с заголовком «список покупок». Однако все эти страницы имеют свойство null Content, из-за чего я не могу получить HTML-контент этих страниц. Я могу убедиться, что по крайней мере одна из этих страниц действительно имеет содержимое в приложении OneNote.

Я прочитал документацию для SDK, и кажется, что я должен просто получить Stream обратно без каких-либо дальнейших действий. Есть ли какой-то шаг, который я пропустил, или я неправильно использую API?


person PingZing    schedule 10.05.2019    source источник


Ответы (2)


Контент страницы может быть запрошен для каждой отдельной страницы, например:

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

Содержимое каждой коллекции страниц может быть запрошено следующим образом (через свойство contentUrl Page ресурс):

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 

}
person Vadim Gremyachev    schedule 12.05.2019
comment
Проголосуйте за это, потому что это работает, но оказывается, что есть (очень!) плохо документированное решение, которое использует SDK и не требует возврата к отправке HTTP-запроса почти вручную. - person PingZing; 17.05.2019

Оказывается, 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();

Оказывается, IOnenotePagesCollectionRequestBuilder, возвращаемый _graphClient.Me.Onenote.Pages, поддерживает индексирование в стиле ключа для извлечения определенной страницы. Полностью невозможно найти с раскрывающимся списком intellisense по умолчанию =/

person PingZing    schedule 17.05.2019