我正在使用门户创建一个 HttpTriggered Azure 函数,该函数应在 CosmosDB 中插入文档。我使用所有默认值,当我配置输出到 Cosmos 的绑定时,我使用集成页面来指定它..
好的,我的函数代码是:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, out dynamic outputDocument, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = new StreamReader(req.Body).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
outputDocument = new { Description = name, id = Guid.NewGuid() };
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
Function.json 是这样的:
{
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"name": "outputDocument",
"databaseName": "outDatabase",
"collectionName": "MyCollection",
"createIfNotExists": true,
"connectionStringSetting": "johncosmosgorter_DOCUMENTDB",
"partitionKey": "id",
"direction": "out",
"type": "cosmosDB"
}
]
}
请注意,绑定参数是由集成页面生成的,我不是手写的。
现在,当我们运行该函数时,我们收到 500 错误,日志显示如下:
Cosmos DB connection configuration 'CosmosDB' does not exist. Make sure that it is a defined App Setting.
这非常奇怪,因为我没有生成绑定。它看起来像是版本 3 与版本 4 绑定参数冲突,因为当我更改绑定以使 connectionStringSetting 成为连接时,它实际上起作用并给出了下一个错误,即
Value cannot be null. (Parameter 'databaseId')
绑定有一个databaseName,将其更改为databaseId 不应该是解决方案。这样做也行不通。
这里出了什么问题,为什么 Azure Functions 的超级简单样板 cosmosDB 输出绑定不起作用?为什么很难得到正确的指导?
预先感谢您的任何见解!
约翰。
请注意,绑定参数是由集成页面生成的,我不是手写的。现在,当我们运行该函数时,我们收到 500 错误。
是的,我确实同意您的观点,在使用集成页面创建 cosmos DB 输出绑定时,绑定参数生成不正确。这些参数不指向 v4。
根据 ms 文档,应使用 connection 代替 connectionStringSetting,并且 containerName 应替换 v4 的 collectionName。
但是它生成了以下属性 -
{
"name": "outputDocument",
"direction": "out",
"type": "cosmosDB",
"connectionStringSetting": "afreen-cosmosdb_DOCUMENTDB",
"databaseName": "outDatabase",
"collectionName": "MyCollection",
"createIfNotExists": true,
"partitionKey": "/id"
}
即使我遇到了这个
Cosmos DB connection configuration 'CosmosDB' does not exist. Make sure that it is a defined App Setting.
错误,并在将connectionStringSetting更正为connection后摆脱了它。
然后我也开始收到
Value cannot be null. (Parameter 'databaseId')
错误,后来我将collectionName更新为containerName,它开始为我工作。
最终的绑定属性如下所示,对我有用 -
{
"name": "outputDocument",
"direction": "out",
"type": "cosmosDB",
"connection": "afreen-cosmosdb_DOCUMENTDB",
"databaseName": "outDatabase",
"containerName": "MyCollection",
"createIfNotExists": true,
"partitionKey": "/id"
}
我得到了输出。
我怎么知道他们正在使用哪个版本
您可以从这里查看该功能的版本。
我已经向产品团队提出了bug,您可以查看以获取进一步的更新。