CreateUploadSession возвращает «Запрос OData не поддерживается» - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь выполнить шаг 1 в C#, в соответствии с Вложение больших файлов в сообщения Outlook в виде вложений из документации Microsoft Graph.

GraphServiceClient и сообщение id Я использую отлично работает при загрузке небольших вложений. Однако при загрузке больших вложений я получил эту ошибку:

Запрос OData не поддерживается.

Основываясь на приведенном ниже коде, я считаю, что правильно следовал документации.

Кто-нибудь знает, почему я получаю сообщение об ошибке, которое я получаю?

var attachmentItem = new AttachmentItem
{
    AttachmentType = AttachmentType.File,
    Name = file.Name,
    Size = file.Length //3.5MB test file
};

UploadSession session = await GraphAPIConnection.GraphClient
    .Me
    .Messages[message.Id]
    .Attachments
    .CreateUploadSession(attachmentItem)
    .Request()
    .PostAsync();

Я проверил, что свойства file, message и attachmentItem были созданы правильно перед попыткой вызова.

Использование пакетов:

  • Microsoft.Graph.Core.1.20.0
  • Microsoft.Graph.Beta.0.12.0-preview

ОБНОВЛЕНИЕ 1:

Я обнаружил, что моей конечной точкой при создании GraphServiceClient была версия 1.0, а не бета. После его изменения в моем коде произошла следующая ошибка:

InvalidAudience

using (Stream fileStream = System.IO.File.OpenRead(file.FullName))
{
  if (session != null)
  {
    int maxSizeChunk = (320 * 1024) * 4;
    List<Exception> exceptions = new List<Exception>();
    byte[] readBuffer = new byte[maxSizeChunk];

    ChunkedUploadProvider uploadProvider = 
        new ChunkedUploadProvider
        (session, GraphAPIConnection.GraphClient, fileStream, maxSizeChunk);

    IEnumerable<UploadChunkRequest> chunkRequests = 
        uploadProvider
        .GetUploadChunkRequests();

    foreach (UploadChunkRequest request in chunkRequests)
    {
      UploadChunkResult result = 
          await uploadProvider
          .GetChunkRequestResponseAsync
          (request, readBuffer, exceptions);
      //ERROR HERE
    }
  }
}

У меня сложилось впечатление, что Graph не нужно использовать альтернативу Outlook API. Тем не менее, похоже, что сеанс загрузки использует его независимо от:

request.RequestUrl: https://outlook.office.com: 443 / api / beta / ...

request .Client.BaseUrl: https://graph.microsoft.com/beta

Означает ли это, что мне нужны дополнительные области для правильного доступа к этому API?

Нужно ли создавать новый клиент просто для этого?

...