Azure函数:如何将http触发器函数的查询字符串参数绑定到Cosmos DB的SQL查询

时间:2017-08-20 16:33:19

标签: azure azure-functions azure-cosmosdb azure-functions-runtime

我正在尝试使用Cosmos DB输入绑定运行http触发器Azure功能。我希望http触发器的url在查询字符串上包含几个参数,这些参数绑定到输入Cosmos DB绑定的SQL查询。我在function.json中尝试以下绑定,但它不起作用(该函数甚至没有被触发):

{
  "direction": "in",
  "type": "httpTrigger",
  "authLevel": "anonymous",
  "name": "req",
  "methods": [ "get" ],
  "route": "users/{age=age?}/{gender=gender?}"
},
{
  "direction": "in",
  "type": "documentDB",
  "name": "users",
  "databaseName": "Database",
  "collectionName": "Users",
  "sqlQuery": "SELECT * FROM x where x.age = {age} and x.gender = {gender}",
  "connection": "COSMOSDB_CONNECTION_STRING"
},

根据此answer,路由约束users/{age=age?}/{gender=gender?}对Web API有效,并且根据documentation ,您可以将任何Web API路由约束与您的参数一起使用。最后,我想向Azure函数发出一个看起来像api/users?age=30&gender=male的GET请求。那怎么办呢?

3 个答案:

答案 0 :(得分:5)

我认为您不能将Cosmos DB绑定到查询参数中定义的值,例如?age=30。至少我还没有在函数文档中看到过这样的例子。

但是你可以将它们绑定到路由参数来实现相同的结果,你已经完成了很多工作。

保持users/{age}/{gender}的路由,您的Cosmos SqlQuery将在http://yourfunctionhost/yourfunction/users/30/male上调用GET时获取这些路由参数

答案 1 :(得分:0)

GET和POST参数将被绑定,因此可以在sqlQuery中使用它们而无需任何其他配置。试一试,这在过去肯定有所改变

答案 2 :(得分:0)

您可以将查询值绑定到 CosmosDB 输入绑定:
Azure Cosmos DB input binding for Azure Functions 2.x and higher

[FunctionName("DocByIdFromQueryString")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
        HttpRequest req,
    [CosmosDB(
        databaseName: "ToDoItems",
        collectionName: "Items",
        ConnectionStringSetting = "CosmosDBConnection",
        Id = "{Query.id}",
        PartitionKey = "{Query.partitionKey}")] ToDoItem toDoItem,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    if (toDoItem == null)
    {
        log.LogInformation($"ToDo item not found");
    }
    else
    {
        log.LogInformation($"Found ToDo item, Description={toDoItem.Description}");
    }
    return new OkResult();
}