Я использую Graph API с RestSharp, чтобы дать пользователям разрешение на чтение файлов OneDrive:
RestClient client = new RestClient("https://graph.microsoft.com/v1.0/me/drive/root:/" + parentFolder + "/" + file + ":/invite");
var request = new RestRequest(Method.POST);
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + accessToken);
request.AddParameter("application/json", "{\"recipients\": [{ \"email\": \"" + email + "\" } ], \"requireSignIn\": true, \"sendInvitation\": false, \"roles\": [\"read\"] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Согласно docs.microsoft.com ответ об успешном выполнении должен быть (и обычно есть) в форме:
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)",
"value":[
{
"@odata.type":"#microsoft.graph.permission",
"id":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY",
"roles":[
"read"
],
"grantedTo":
{
"user":
{
"id":"88902115-1090-4c29-9266-1b16b0a4cf64",
"displayName":"Test User"
}
}
}
]
}
Но иногда я получаю ответ в форме:
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(permission)",
"value":[
{
"@odata.type":"#microsoft.graph.permission",
"roles":[
"read"
],
"invitation":
{
"signInRequired":true
},
"link":
{
"type":"view",
"webUrl":"https://mydomain-my.sharepoint.com/:w:/g/personal/userindomain/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst"
}
}
]
}
Во-первых, можно ли продолжать использовать Invite
снова и снова для одного и того же пользователь или я должен проверять, есть ли у них уже права и использовать Invite
, только если у них нет требуемого разрешения (требуется больше вызовов API Graph)?
Во-вторых, почему я получаю эту альтернативу ответ иногда? Могу ли я всегда игнорировать его WebUrl и использовать WebIrl DriveItem, который я извлек и сохранил при создании файла?
Дополнительная информация. Похоже, это связано с моим доменом. Мои пользователи вошли в систему как aaa. bbb@mydomain.co.uk. Это дает предположительно правильный ответ (без webUrl). Посмотрев папку OneDrive в Интернете, я вижу, что разрешение предоставлено, но webUrl DriveItem дает пользователю ошибку разрешения и не откроет файл. Если я использую точку останова и изменяю адрес электронной почты на aaa. bbb@mydomain.onmicrosoft.com, я получаю второй ответ, и пользователь может открыть файл с помощью webUrl в ответе. Странно, что это новый пользователь, у которого никогда не было адреса aaa. bbb@mydomain.onmicrosoft.com, и я нигде не вижу этот адрес в настройках пользователя в Office Admin.