【发布时间】:2019-03-25 18:21:41
【问题描述】:
尝试使用 REST API 创建文档时出现以下错误:
The input content is invalid because the required properties - 'id; ' - are missing
在各种 SDK 中,有一个可选参数 disableAutomaticIdGeneration,如果设置为 true,如果未提供 ID,则会拒绝请求并出现此错误。我正在发出一个非常简单的 REST 请求,所以我自己没有添加这个参数(而且我什至不知道什么标头——大概是一个标头——我会添加,因为 REST API 的文档没有涵盖它)。
唯一需要注意的是集合有一个定义的分区键。我找不到任何说明如果定义了分区键需要 ID 的文档,但似乎确实如此。
除非有人可以回答为什么会/可能会发生这种情况,否则我会考虑我的“it-must-be-defined-if-partition-key-is-defined”答案 em> 最终回答。
下面的请求(不是单纯的 HTTP,而是内容):
{
"headers": {
"content-type": "application/json",
"x-ms-version": "2017-02-22",
"x-ms-date": "Mon, 25 Mar 2019 17:57:03 GMT"
},
"body": {
"data": "myData",
// "id": "some_id" //I don't want to do this because I want Cosmos to auto-generate this like when I create a document in the Portal!
},
"method": "post",
"url": "https://my-database-server.documents.azure.com/dbs/MyDatabase/colls/MyCollection/docs"
}
还有几个问题要解开...
Create a Document 文档指出id 是必需的,所以也许门户实际上是在浏览器端创建它,然后将它包含在引擎盖下的请求中,但如果这是为什么 SDK 中存在 disableAutomaticIdGeneration 选项?
此外,相同的文档状态(突出显示是我的):
它是标识文档的唯一ID,即没有两个文档应该共享相同的ID。 ID 不得超过 255 个字符。 在创建文档时自动添加 ID 字段而不指定 ID 值。但是,您始终可以通过在请求正文中为其分配自定义值来更新 ID 值。
通过粗体部分,似乎 key id 是必需的,但也许我可以传递 null 或空字符串?但是,我尝试了这两种方法,两次都出错(一个说null是不允许的,另一个是字符串不能为空)。
【问题讨论】:
标签: azure azure-cosmosdb