Список каталогов OneDrive отображается при нажатии на общую ссылку OneNote SectionGroup - PullRequest
0 голосов
/ 13 мая 2018

При создании анонимной ссылки общего доступа для группы разделов блокнота с помощью API OneNote общая ссылка открывает список каталогов OneDrive вместо открытия веб-страницы OneNote для группы общих разделов.

URL-адрес, возвращаемый после вызова GetOrCreateAnonymousSharingLink, выглядит следующим образом:

https://company-my.sharepoint.com/:o:/g/personal/aaa_company_onmicrosoft_com/Eas72kadUjRBs9_EmWWWVncBaNLxzujnkFlGRobX6IOBHw

Отображаемый список каталогов имеет ссылку .one и ссылку .onetoc2. При нажатии на любую ссылку откроется сайт OneNote и отобразятся раздел и его страницы.

Общие ссылки, созданные вручную, имеют тот же формат, что и выше, однако они содержат параметр запроса, например, e=1zreF2

Должен ли этот параметр быть включен в URL, возвращаемый GetOrCreateAnonymousSharingLink? Или я сделал что-то с моими Блокнотами, что может привести к отображению списка каталогов вместо реального блокнота.

Вот код:

internal static async Task<string> GenerateSharingLink(string sectionGroupId, SDKHelper.NotebookSecurityRole securityRole) {
    string result;
    string accessLevel = "{\"accessLevel\":\"Edit\"}";
    var accessToken = await SDKHelper.GetAccessToken(SDKHelper.ApiResourceType.OneNoteApi);

    string requestUri = $"https://www.onenote.com/api/v1.0/users/aaa@company.onmicrosoft.com/notes/sectiongroups/{sectionGroupId}/Microsoft.OneNote.Api.GetOrCreateAnonymousSharingLink";
    var accessLevelJson = new StringContent(JsonConvert.SerializeObject(accessLevel), Encoding.UTF8, "application/json");

    using(var client = new HttpClient()) {
        client.BaseAddress = new Uri("https://onenote.com");
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

        client.DefaultRequestHeaders
            .Accept
            .Add(new MediaTypeWithQualityHeaderValue("application/json"));

        using(var request = new HttpRequestMessage(HttpMethod.Post, requestUri)) {
            request.Content = new StringContent(accessLevel, Encoding.UTF8, "application/json");

            using(var response = await client.SendAsync(request)) {
                if (!response.IsSuccessStatusCode) {
                    throw new Microsoft.Graph.ServiceException(
                        new Error {
                            Code = response.StatusCode.ToString(),
                                Message = await response.Content.ReadAsStringAsync()
                        });
                }
                result = await response.Content.ReadAsStringAsync();
            }
        }
    }
    return result;
}
...