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请求一样。
答案 0 :(得分:0)
该错误最终导致我陷入了我用于执行休假请求的Flurl实现的一个兔子洞。
Put方法没有主体,正在调用PutJsonAsync
,其中according to the spec,它期望内容类型为application/octet-stream
,内容长度为0。
我将对PutJsonAsync
的呼叫替换为PutAsync
,一切都神奇地开始了。
因此,由于我在包装器代码中的误用,Flurl自身内部似乎存在一些导致此问题的错误。