首页 文章

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

提问于
浏览
0

我在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似乎期望分区键以其他方式传递,即,请求 Headers ?

使用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 回答

  • 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

相关问题