7

我正在尝试使用 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"
},

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

4

3 回答 3

5

我认为您不能将 Cosmos DB 绑定配置到查询参数中定义的值,例如?age=30. 至少我在函数文档中没有看到任何类似的例子。

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

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

于 2017-08-21T02:09:46.247 回答
1

GET 和 POST 参数将被绑定,因此它们可以在 sqlQuery 内部使用,无需任何额外配置。试试看,这在过去肯定改变了

于 2018-05-24T07:13:39.913 回答
0

您可以将查询值绑定到 CosmosDB 输入绑定:
Azure Functions 2.x 和更高版本的 Azure Cosmos DB 输入绑定

[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();
}
于 2021-01-08T13:51:23.033 回答