我在Cosmos DB中有一个分区集合。我正在尝试使用Postman执行此集合中的存储过程,如此处记录https://docs.microsoft.com/en-us/rest/api/documentdb/execute-a-stored-procedure。当我这样做时,我遇到以下错误:
{
"code": "BadRequest",
"message": "PartitionKey value must be supplied for this operation.\r\nActivityId: 0000000-0000-0000-0000-000000000000000, Microsoft.Azure.Documents.Common/1.19.162.2"
}
我有一个分区键,我将其作为参数发送到存储过程,然后在过程中使用查询的WHERE
子句,但API似乎期望分区键是以其他方式传递,即请求标题?
使用C#Document DB SDK时,分区键设置为RequestOption
,如下所示:
var storedProcedureUri = UriFactory.CreateStoredProcedureUri("MyDB", "MyCol", "MyProc");
var requestOptions = new RequestOptions { PartitionKey = new PartitionKey(myPartitionKey) };
var procedureResponse = await Client.ExecuteStoredProcedureAsync<MyObjType>(storedProcedureUri, requestOptions);
var document = procedureResponse.Response;
return document;
从基本Web客户端执行该过程时,我没有看到此请求选项的设置位置和方式。
答案 0 :(得分:2)
需要PartitionKey作为请求标头以及其他几个:
client.DefaultRequestHeaders.Add("x-ms-date", utc_date);
client.DefaultRequestHeaders.Add("x-ms-version", "2017-02-22");
client.DefaultRequestHeaders.Add("x-ms-documentdb-partitionkey",
new PartitionKey(signingDocumentId).ToString());
有关详细信息,请参阅此处:https://docs.microsoft.com/en-us/rest/api/documentdb/common-documentdb-rest-request-headers