Azure Cosmos DB存储过程:从Web客户端设置分区密钥?

时间:2018-01-22 18:14:57

标签: rest postman azure-cosmosdb

我在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客户端执行该过程时,我没有看到此请求选项的设置位置和方式。

1 个答案:

答案 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