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, которая вызвала эту проблему из-за неправильного использования мной в моем коде оболочки.