ADLS Gen 2 Storage API - отказ от Http-команд

У меня проблема с некоторыми конечными точками в операциях пути к APIADLS Gen 2.

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

Однако после добавления каталога в файловую систему некоторые команды не работают - HEAD, GET и DELETE.

Например, я создал файловую систему с именем c79b0781 с путем к каталогу abc / def

Сбой вызова с кодом состояния 400 (указанная HTTP-команда недействительна - она ​​не распознается сервером.): DELETE https://myadls.dfs.core.windows.net/c79b0781/abc?recursive=true&timeout=30

Для заголовков у меня есть:

x-ms-версия: 2018-11-09

Я могу удалить файловую систему из обозревателя хранилищ Azure, но API отклоняет мой запрос.

Действие List также не работает с аналогичной ошибкой

Сбой вызова с кодом состояния 400 (указанная HTTP-команда недействительна - она ​​не распознается сервером): GET https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem&recursive=false&timeout=30

С заголовками:

x-ms-версия: 2018-11-09

И, наконец, мой Get Properties тоже не работает

Сбой вызова с кодом состояния 400 (указанная HTTP-команда недействительна - она ​​не распознается сервером.): HEAD https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem&timeout=30

Кажется, это происходит только тогда, когда я добавляю каталоги в файловую систему.

Немного подробнее:

Этот тест работает

PUT https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem
GET https://myadls.dfs.core.windows.net/c79b0781?recursive=false&resource=filesystem
DELETE https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem

Мой второй тест с созданием каталога

PUT https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem
PUT https://myadls.dfs.core.windows.net/c79b0781/abc/123?resource=directory

После этого вызовы начинают отклонять HTTP-глаголы

ПОЛУЧИТЬ https://myadls.dfs.core.windows.net/c79b0781?recursive=false&resource=filesystem

Если присмотреться к моему запросу на создание каталога, он выглядит так:

ПОСТАВИТЬ https://myadls.dfs.core.windows.net/c79b0781/abc/123?resource=directory

С заголовками:

Авторизация: [опущено]
Content-Length: 0

И я могу видеть папки в Storage explorer, я просто не могу с ними работать после этого момента.

Тестовый пример 2

Я начал свой путь, задаваясь вопросом, есть ли это разрешения. Итак, я создал новую файловую систему с помощью обозревателя хранилищ Azure со структурой папок abc / def внутри.

Тест 1 (успешно)

Получить список для каталога "abc"
Получить список для каталога "abc/def"

Тест 2 (неудачный)

Создать каталог "uvw/xyz"
Получить список для каталога "abc" Здесь не удается
получить список для каталога "abc/def"
Получить список для каталога "uvw/xyz"

Как только я создаю каталог через api, создается впечатление, что вся файловая система начинает отклонять все HTTP-запросы.

1 ответ

Решение

Эта ошибка привела меня к моей реализации Flurl, которую я использую для выполнения запросов на отдых.

Метод Put не имел тела и вызывал PutJsonAsyncгде в соответствии со спецификацией ожидается, что тип контента будетapplication/octet-stream с длиной содержимого 0.

Я заменил звонок на PutJsonAsync к PutAsync и все волшебным образом заработало.

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

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