C# 和 Azure CosmosDB REST API:如何使用 HTTPClient.PostAsync 执行存储过程?

C# and Azure CosmosDB REST API: how to execute stored procedure using HTTPClient.PostAsync?

我正在尝试使用 Azure CosmosDB REST API 执行存储过程。根据 this document 我需要传递一个包含存储过程输入参数的“数组”。

在我的例子中,我需要传递一个参数,它是一个对象。我已序列化对象,但无法弄清楚如何将其作为 HTTPContent 传递到 PostAsync 方法中。我应该使用什么类型的 HTTPContent 以及我应该将我的对象转换成什么类型​​才能创建 HTTPContent?

当我使用 Postman 执行此 SP 时,我的请求正文如下所示:

["{\r\n\"id\" : \"someid\",\r\n\"data\": \"somedata\"\r\n}"]

所以我只需要从 JSON 构造这种类型的正文并将其作为 C# 中的 HTTPContent 传递。

从提供的示例中我可以得出结论,它是字符串数组。所以我需要序列化我的 JSON,将其添加到数组中,然后将其转换为 HTTPContent。在“StringContent”的情况下,我应该如何将字符串数组转换为字符串?这不起作用:

string s = "[\"" + serialisedJson + "\"]";
HttpContent c = new StringContent(s, Encoding.UTF8, "application/json");

我从 SP 收到 JSON 解析错误。

你应该使用 StringContent,像这样:

client.DefaultRequestHeaders.Add("x-ms-documentdb-partitionkey", "[\"PartitionKey\"]");
HttpContent content = new StringContent("[{\r\n\"id\" : \"someid\",\r\n\"data\": \"somedata\"\r\n}]", Encoding.UTF8,"application/json");
HttpResponseMessage response = await client.PostAsync(new Uri(baseUri, resourceLink),content);

事实证明,这一次的答案是 here:CosmosDB API 需要特定的内容类型,存储过程显然也是如此。