Метод DriveItem Patch с ошибкой в ​​Graph Api

Я создаю API с ASP.NET Core, который обращается к списку/диску с помощью графического API, и в какой-то момент мне нужно обновить элемент, созданный в библиотеке дисков, чтобы добавить идентификатор (который является настраиваемым столбцом), но я получаю сообщение об ошибке недопустимого запроса. Может ли кто-нибудь мне помочь?

Обновлено: Я нашел проблему, по-видимому, она не распознает дополнительные поля, когда я указываю только имя, это работает. Как я могу обновить настраиваемые поля?

        public async Task<DriveItem?> CreateDriveItem(FileDTO file)
        {
            var fileBytes = Convert.FromBase64String(file.Base64);
            var fileNameWithExtension = file.FileName + file.FileType;

            var requestBody = new CreateUploadSessionPostRequestBody
            {
                Item = new DriveItemUploadableProperties
                {
                    Name = fileNameWithExtension,
                }
            };

            var uploadSession = await _graphClient.Graph.Drives[_driveId].Root.ItemWithPath(fileNameWithExtension).CreateUploadSession.PostAsync(requestBody);

            if (uploadSession == null) { return null; }

            using var stream = new MemoryStream(fileBytes);
            await UploadFileInChunks(uploadSession.UploadUrl ?? "", stream);

            var createdItem = await _graphClient.Graph.Drives[_driveId].Root.ItemWithPath(fileNameWithExtension).GetAsync((requestConfiguration) =>
            {
                requestConfiguration.QueryParameters.Expand = new string[] { "listItem($expand=fields)" };
            });

            if (createdItem == null) { return null; }

            var requestBodyPatch = new DriveItem
            {
                Name = "NomeAtualizado com ID.txt",
                ListItem = new ListItem
                {
                    Fields = new FieldValueSet
                    {
                        AdditionalData = new Dictionary<string, object>
                        {
                            {"ID_Solicitacao", 123 }
                        }
                    }
                }
            };

            var patch = await _graphClient.Graph.Drives[_driveId].Items[createdItem.Id].PatchAsync(requestBodyPatch);

            if (patch == null) { return null; }

            return patch;
        }

и ошибка:

{
  "message": "OData error occurred.",
  "details": "Cannot update a listItem via driveItem, patch the listItem directly"
}

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В библиотеке документов SharePoint каждый элемент состоит из DriveItem и ListItem, связанных друг с другом. Чтобы обновить такой элемент, выполните следующие действия:

Загрузите документ:

Сначала вы загружаете документ. Ответ от этой загрузки будет включать созданный DriveItem.

var uploadSession = await_graphClient.Graph.Drives[_driveId].Root.ItemWithPath(fileNameWithExtension).CreateUploadSession.PostAsync(requestBody);

Получите идентификатор ListItem:

Ответ DriveItem содержит свойство listItem. Это свойство listItem включает идентификатор, который является идентификатором связанного ListItem.

var createdItem = await _graphClient.Graph.Drives[_driveId].Root.ItemWithPath(fileNameWithExtension).GetAsync((requestConfiguration) =>
{
    requestConfiguration.QueryParameters.Expand = new string[] { "listItem($expand=fields)" };
});

createdItem.ListItem?.Id

Обновите ListItem:

Используя listItemId, вы можете напрямую обновлять поля ListItem без необходимости его поиска.

var fields = new FieldValueSet
    {
      AdditionalData = new Dictionary<string, object>
        {
          {"ID_Solicitacao", 123 }
        }
    };
  
var patch = await _graphClient.Graph.Sites[_siteId].Lists[_driveListId].Items[createdItem.ListItem?.Id].Fields.PatchAsync(fields);

Этот метод гарантирует, что вы сможете эффективно загрузить документ и обновить связанные с ним поля ListItem, используя предоставленный идентификатор из ответа на загрузку.

Другие вопросы по теме

Похожие вопросы

MailKit OAuth2 SMTP Office365 Отправить почту
Как добавить 32-разрядный пользовательский элемент управления Windows Forms в панель инструментов Visual Studio в vs2022 (64-разрядная версия)
Как добавить строку или разделитель в UniformGrid в WPF?
Почему я получаю исключение User-Unhandled?
Невозможно подключиться к SQLLite в MAUI (.NET 8)
Как преобразовать тип в универсальный тип, фактический тип которого известен в момент преобразования?
Как решить проблему «ManagedIdentityCredential.GetToken не удалось получить токен доступа». при использовании Azure ServiceBusTrigger и управляемого удостоверения?
Селектор шаблонов данных нажимается только один раз, а не при обновлении полного свойства
Как разрешить окну использовать стиль по умолчанию, но не стиль инфраструктуры пользовательского интерфейса (Lepoco WPFUI) в WPF?
Можно ли сохранить только отношение и определенную таблицу в отношении «многие ко многим» с помощью Entity Framework Core?