Значение утверждения аудитории недействительно для текущего ресурса при использовании ChunkedUploadProvider для вложения в API клиента Microsoft Graph.

Я пытаюсь использовать следующий код, но получаю сообщение «Сообщение: значение утверждения аудитории недействительно для текущего ресурса. Требование аудитории - https://graph.microsoft.com ', URL-адрес запроса -' https://outlook.office.com/api/beta/Users ... "

Я получаю его у провайдера .GetUploadChunkRequests (); звоните ниже:

AttachmentItem attachmentItem= new AttachmentItem
            { 
                Name = [Name],
                AttachmentType = AttachmentType.File,
Size = [Size]
            };

var session = graphClient.Users[USEREMAIL].Messages[MESSAGEID].Attachments.CreateUploadSession(attachmentItem).Request().PostAsync().Result;
            var stream = new MemoryStream(BYTEARRAY);
            var maxSizeChunk = DEFAULT_CHUNK_SIZE;
            var provider = new ChunkedUploadProvider(session, graphClient, stream, maxSizeChunk);
            var chunkRequests = provider.GetUploadChunkRequests();

(Я использую graphClient для успешной отправки электронных писем, а также использовал его для загрузки больших файлов с помощью метода uploadSession)




Ответы (1)


Из Андру Истмана на GitHub:

Скорее всего, вы получаете ошибку из-за использования ChunkedUploadPorvider вместо использования FileUploadTask для загрузки вложения, которое устанавливает заголовок Auth, чтобы вызвать ошибку, которую вы получаете.

Чтобы использовать задачу загрузки файла, выполните следующие действия.

Сначала создайте сеанс загрузки и передайте его задаче, как показано на рисунке.

// Create task
var maxSliceSize = 320 * 1024; // 320 KB - Change this to your chunk size. 4MB is the default.
LargeFileUploadTask<FileAttachment> largeFileUploadTask = new LargeFileUploadTask<FileAttachment>(uploadSession, stream, maxSliceSize);

Создайте монитор загрузки (необязательно)

// Setup the progress monitoring
IProgress<long> progress = new Progress<long>(progress =>
{
    Console.WriteLine($"Uploaded {progress} bytes of {stream.Length} bytes");
});

Служба возвращает только URI местоположения, который можно считать из объекта результата следующим образом.

UploadResult<FileAttachment> uploadResult = null;
try
{
    uploadResult = await largeFileUploadTask.UploadAsync(progress);
    if (uploadResult.UploadSucceeded)
    {
        Console.WriteLine(uploadResult.Location);//the location of the object
    }
}
catch (ServiceException e)
{
    Console.WriteLine(e.Message);
}
person Mike    schedule 31.01.2020