При загрузке в контейнер BLOB-объектов Azure не удалось аутентифицировать запрос - PullRequest
0 голосов
/ 09 марта 2019

Я получаю эту ошибку при загрузке в контейнер на Azure:

Серверу не удалось аутентифицировать запрос.Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.

И я знаю, что проблема вызвана различными часовыми поясами.

Но в моемприложение Я не могу зависеть от часового пояса, чтобы заставить дыру работать.Мне нужно решение, которое игнорирует часовой пояс для отправки файлов в контейнер.

Я не использую SAS.

Это мой код для загрузки:

    public async Task<bool> SendPhotosAsync(int examID)
    {
        try
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            cts.CancelAfter(Constants.SendExamPhotosAsyncTimeout);

            foreach (var image in GetExamFacePhotos(examID))
            {
                var fileName = Path.GetFileName(image);

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Constants.AzureBlobStorageConnectionString);

                // Create the blob client.
                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

                // Retrieve reference to a previously created container.
                CloudBlobContainer container = blobClient.GetContainerReference(Constants.AzureBlobContainerExamFacePhotos);

                // Retrieve reference to a blob named "myblob".
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

                // Create or overwrite the "myblob" blob with contents from a local file.
                using (var fileStream = File.OpenRead(image))
                {
                   if (fileStream.Length > 0)
                   {
                       await blockBlob.UploadFromStreamAsync(fileStream, fileStream.Length, null, null, null, cts.Token);
                   }
                }
           }

           return true;
    }
    catch (TaskCanceledException)
    {
        throw new Exception(_context.GetString(Resource.String.error_task_canceled));
    }
    catch (Exception)
    {
        throw new Exception(_context.GetString(Resource.String.error_send_exam_media));
    }
}

Редактировать 1

Чтобы воспроизвести то, что сказал @Gaurav, я изменил устройство GMT на 0 и сохранил время для моего текущего GMT (-3), GMT-0 09:02, и я получилExtendedErrorInformation:

Слишком старый заголовок даты запроса: 'Пн, 11 марта 2019, 09:02:25 GMT'

Azure проверяет время и GMTзапрос.Если не совпадает, отображается ошибка.

Изменение на GMT-4 и установка времени на правильный часовой пояс, GMT-4 08:15, запрос был успешно выполнен .

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

...