1

我在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-版本: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

它似乎只在我将目录添加到文件系统时发生。

更深入一点:

此测试有效

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=文件系统

我的第二个目录创建测试

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

带标题:

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

而且我可以在存储资源管理器中看到文件夹,在此之后我无法对它们采取行动。

测试用例 2

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

测试 1(通过)

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

测试 2(失败)

创建目录 "uvw/xyz"
获取目录 "abc" 的列表在这里失败
获取目录 "abc/def"
的列表 获取目录 "uvw/xyz" 的列表

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

4

1 回答 1

0

这个错误最终导致我陷入了我用于执行休息请求的 Flurl 实现中。

Put 方法没有主体,并且根据规范PutJsonAsync调用where ,它期望内容类型的内容长度为 0。application/octet-stream

我替换了对PutJsonAsyncto的调用PutAsync,一切都神奇地开始工作。

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

于 2019-10-28T15:02:37.847 回答