При создании анонимной ссылки общего доступа для группы разделов блокнота с помощью 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;
}