ADLS Gen 2存储API-拒绝Http动词

时间:2019-10-25 14:46:24

标签: azure-storage azure-data-lake-gen2 storage-services

ADLS Gen 2 API路径操作中的某些端点存在问题。

我可以创建,列出,获取属性以及删除文件系统。

但是,在将目录添加到文件系统后,某些动词会失败-HEAD,GET和DELETE。

例如,我创建了一个名为c79b0781的文件系统,其目录路径为abc / def

  

呼叫失败,状态码为400(指定的HTTP动词无效-服务器无法识别。):DELETE https://myadls.dfs.core.windows.net/c79b0781/abc?recursive=true&timeout=30

对于标题,我有:

  

x-ms-version:2018-11-09

我可以从Azure存储资源管理器中删除文件系统,但是API拒绝了我的查询。

List操作也失败,并显示类似错误

  

呼叫失败,状态码为400(指定的HTTP动词无效-服务器无法识别。):GET https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem&recursive=false&timeout=30

带标题:

  

x-ms-version:2018-11-09

最后,我的“获取属性”也失败了

  

呼叫失败,状态码为400(指定的HTTP动词无效-服务器无法识别。):HEAD https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem&timeout=30

似乎只有在将目录添加到文件系统时才会发生。

深入一点:

此测试有效

  

输入https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem
  获取https://myadls.dfs.core.windows.net/c79b0781?recursive=false&resource=filesystem
  删除https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem

第二次创建目录的测试

  

输入https://myadls.dfs.core.windows.net/c79b0781?resource=filesystem
  放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

带标题:

  

授权:[略]
  内容长度:0

我可以在Storage Explorer中看到这些文件夹,此后我就无法对其进行操作了。

测试用例2

我已经开始想知道这是否是权限。因此,我通过Azure存储资源管理器创建了一个新文件系统,其中包含abc / def文件夹结构。

测试1(通过)

  

获取目录“ abc”的列表
  获取目录“ abc / def”的列表

测试2(失败)

  

创建目录“ uvw / xyz”
  获取目录“ abc”的列表此处失败
  获取目录“ abc / def”的列表
  获取目录“ uvw / xyz”的列表

一旦我通过api创建目录,就好像整个文件系统开始拒绝所有HTTP请求一样。

1 个答案:

答案 0 :(得分:0)

该错误最终导致我陷入了我用于执行休假请求的Flurl实现的一个兔子洞。

Put方法没有主体,正在调用PutJsonAsync,其中according to the spec,它期望内容类型为application/octet-stream,内容长度为0。

我将对PutJsonAsync的呼叫替换为PutAsync,一切都神奇地开始了。

因此,由于我在包装器代码中的误用,Flurl自身内部似乎存在一些导致此问题的错误。

相关问题