Ошибка загрузки DrievItems на диске списка страниц сайта

Ошибка загрузки для всех DrivesItems на Диске, связанных со списком SitePage на сайте sharepoint.

Запрос Graph API:

UploadSession uploadSession = GraphCLient.Sites[{SiteId}].Drives[{DriveId of SitePages List }]. Items[{DriveFolderID}].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;

UploadSession будет успешно создан, но chunkuploadprovider выдает ошибку.

Ответ об ошибке: Код: accessDenied Сообщение: у вызывающего абонента нет разрешения на выполнение действия. Внутренняя ошибка

Фрагмент кода:

private void UploadItem(OneDriveJsonStructure driveItem)
        {
            try
            {
                MemoryStream memStream = (MemoryStream)driveItem.Content;
                byte[] buffer = memStream.ToArray();
                DriveItem item = null;
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))
                {

                    UploadSession uploadSession = this._SharepointOperations._GraphCLient.Sites[this._SiteId].Drives[this._DriveId].Items[this._DriveFolderId].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;
                    var provider = new ChunkedUploadProvider(uploadSession, this._SharepointOperations._GraphCLient, memStream);
                    var chunkRequests = provider.GetUploadChunkRequests();
                    var readBuffer = new byte[buffer.Length];
                    var trackedExceptions = new List<Exception>();
                    DriveItem itemResult = null;

                    foreach (var request in chunkRequests)
                    {
                        // Send chunk request
                        var result = provider.GetChunkRequestResponseAsync(request, readBuffer, trackedExceptions).Result;
                        if (result.UploadSucceeded)
                        {
                            itemResult = result.ItemResponse;
                            item = result.ItemResponse;
                        }
                    }
                    if (itemResult == null)
                    {
                        UploadChunkResult result = null;
                        // Retry the upload ...
                        foreach (var request in chunkRequests)
                        {
                            // Send chunk request
                            result = provider.GetChunkRequestResponseAsync(request, readBuffer, trackedExceptions).Result;
                        }
                        item = result.ItemResponse;
                    }
                }
                item.Permissions = driveItem.Item.Permissions;
                GivePermission(item);

Предоставление разрешения клиентскому приложению из Azure AD:

Разрешение графика:  Разрешение на график

Разрешения Sharepoint:  Разрешения Sharepoint

Даже после всех этих разрешений он выдает это сообщение об ошибке:

«У вызывающего абонента нет разрешения на выполнение действия».

Какие разрешения необходимы для выполнения этого действия?

Загрузка для диска Элементы другого диска выполняются успешно.


person Subhanu Sharma    schedule 11.12.2019    source источник


Ответы (1)


Теперь, когда загрузка driveItems другого диска выполнена успешно, ваш код должен быть в порядке.

Таким образом, ключ к проблеме заключается в разрешениях пользователя SharePoint.

Пожалуйста, проверьте, может ли учетная запись пользователя загружать файлы в целевую папку на вашем сайте SharePoint.

Если у пользователя нет разрешения на это, вам необходимо использовать учетную запись администратора, чтобы предоставить пользователю разрешение на редактирование.

Подробные инструкции:

  1. Рядом с названием папки нажмите Многоточие…
  2. Во всплывающем окне файла нажмите Поделиться.
  3. В диалоговом окне «Поделиться» нажмите Доступ открыт, а затем нажмите Дополнительно.
  4. Нажмите Прекратить наследование разрешений.
  5. Добавьте пользователя в группу SharePoint, у которой есть разрешение на редактирование или участие. (Если вы не хотите изменять группу SharePoint по умолчанию, просто создайте новую)

Быстрый способ: предоставить пользователю доступ к этой папке (с разрешением на редактирование).

Рядом с названием папки нажмите Многоточие…. Во всплывающем окне файла нажмите Поделиться. В диалоговом окне «Поделиться» следуйте снимку экрана. введите здесь описание изображения


ОБНОВЛЕНИЕ:

Обратите внимание, что мы не можем загружать какие-либо документы в библиотеку документов страниц сайта. Использование API также не поддерживается.

person Allen Wu    schedule 12.12.2019
comment
Я попробовал ваши шаги, но у меня это не сработало. По-прежнему получаю ту же ошибку. Кроме того, я использую аутентификацию только для приложений для аутентификации моего графического клиента. Поэтому я не думаю, что разрешения пользователей окажут влияние. - person Subhanu Sharma; 12.12.2019
comment
Может ли учетная запись пользователя загружать файлы на сайт SharePoint? Перейдите на yourdomain.sharepoint.com, чтобы перейти к целевой папке / диску, чтобы пройти тест. - person Allen Wu; 12.12.2019
comment
Учетная запись пользователя может загружать файлы в другие библиотеки документов на сайте sharepoint, но не может загружать в библиотеку документов SitePages (это список, созданный системой типа «Библиотека документов»). - person Subhanu Sharma; 12.12.2019
comment
@SubhanuSharma Думаю, я знаю причину. Для обычной библиотеки документов вы можете использовать метод, который я упомянул выше, чтобы предоставить разрешение на загрузку. Но вы не можете загружать какие-либо документы в библиотеку документов SitePages. Конечно, вы также не можете использовать API для его реализации. - person Allen Wu; 12.12.2019
comment
Да, это учетная запись администратора. Имя библиотеки документов: Страницы сайта. Это библиотека страниц сайта. - person Subhanu Sharma; 12.12.2019
comment
Но как я могу создавать страницы на сайте SharePoint программно? - person Subhanu Sharma; 12.12.2019
comment
@AllweWu Я видел обновление в вашем ответе. Моя цель - сделать резервную копию страниц сайта и восстановить их при необходимости. Для чего я сделал резервную копию библиотеки документов SitePages, но они не могут быть восстановлены. У вас есть какой-нибудь способ достичь моей цели? - person Subhanu Sharma; 12.12.2019
comment
@SubhanuSharma Давайте поговорим здесь: chat.stackoverflow.com/rooms/204163/ - person Allen Wu; 13.12.2019