如何使用DocumentDb从HttpTrigger路由中提取分区键?

时间:2018-02-11 20:35:09

标签: c# azure azure-functions

我尝试编写一个基于分区键提取所有文档的函数,通过具有类似REST路由的HttpTrigger执行。该文档使用{propertyName}语法,但使用传递POCO的队列触发器。

我的路线是: /api/accounts/{accountId}/messages

该功能如下所示:

[FunctionName("getAllMessages")]
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(Route = "accounts/{accountId}/messages")]HttpRequestMessage req,
    string accountId,
    [DocumentDb(PartitionKey = "{accountId}"]IEnumerable<Message> messages
) {
    return req.CreateResponse(HttpStatusCode.OK, messages);
}

无论分区键如何,都会返回所有消息。调试验证是否正确选取了accountId参数。

使用DocumentClient代替输入绑定会返回正确的消息集(剔除任何与帐户ID不匹配的内容)。

var query = documentClient.CreateDocumentQuery(
    /* ... */,
    new FeedOptions { PartitionKey = new PartitionKey(accountId) }
);

return req.CreateResponse(HttpStatusCode.OK, query.ToList());

1 个答案:

答案 0 :(得分:2)

  

无论分区键如何,都会返回所有消息。调试验证是否正确选取了accountId参数。

我已经测试了你的代码,我也得到了相同的结果。似乎分区键不起作用。但我们可以获得accountId的价值。如果你真的想得到 特定的分区键消息,我建议你可以在 DocumentDB 属性中使用{{1}}。此外,您还可以在github上发布有关此错误的问题。