Различные ответы от Graph API, совместно использующие файлы OneDrive - PullRequest
1 голос
/ 16 января 2020

Я использую 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.

...