DocumentDB - DELETE导致401错误

时间:2016-08-21 17:40:18

标签: azure azure-cosmosdb

当我尝试对DocumentDB集合执行DELETE动词时,我总是得到401。查询/插入/更新的POST工作正常,所以我确信我的计算授权令牌的代码是正确的。然而,我不确定我应该为资源ID和资源类型传递什么。

payLoad := LowerCase(Verb) + #10+
           LowerCase(resourceType) + #10+
           LowerCase(resourceId) + #10+
           LowerCase(utc_date) + #10 +
           '' + #10; //instead of the "date" header

对于POST(有效),我使用

"docs" and "dbs/mydb/mycol/licenses"

对于DELETE,我使用“_self”属性的值作为要删除的doc的url。我尝试过任何我能想到的资源类型和资源ID的组合:

docs    dbs/icUoAA==/colls/icUoAKizCgA=/docs
docs    dbs/icUoAA==/colls/icUoAKizCgA=/docs/icUoAKizCgADAAAAAAAAAA==
docs    dbs/icUoAA==/colls/icUoAKizCgA=/docs/icUoAKizCgADAAAAAAAAAA==/
docs/icUoAKizCgADAAAAAAAAAA==   dbs/icUoAA==/colls/icUoAKizCgA=/docs
docs/icUoAKizCgADAAAAAAAAAA==   dbs/icUoAA==/colls/icUoAKizCgA=/docs/icUoAKizCgADAAAAAAAAAA==
etc.
然而,

DELETE总是因401而失败。我需要使用不同的东西吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以向DocumentDB提出两种请求。一个基于您定义的“id”属性,一个基于内部资源ID(“_rid”)。当您使用“id”时,您需要使用整个链接来生成授权令牌,因此对于删除它看起来像

delete
docs
dbs/mydb/colls/mycol/docs/cc0d4caabc714aac976c9d0a2e9243ed
sun, 21 aug 2016 20:00:00
 //newline

如果您正在使用内部资源ID,那么您只需传入您要删除的文档的“_rid”,例如

delete
docs
icuoakizcgadaaaaaaaaaa== //lowercase
sun, 21 aug 2016 20:00:00
 //newline

可能有助于调试这些问题的一件事是查看随401返回的响应正文。它应该包含一条错误消息,告诉您服务器所期望的有效负载。