我正在尝试实现一个Azure HTTP函数,该函数获取一些JSON数据并在CosmoDB数据库中创建一个新对象。
我在Stackoverflow上阅读了以下问题:
但是他们使用的是Function 1.x版本,因此我在Microsoft方面搜索了一些准则,并发现了以下内容:
基于本文,我在Visual Studio社区中编写了C#类,并希望将其发布在我的Azure App Function资源上:
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Extensions.CosmosDB;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using BackendFunctions.Utils;
namespace BackendFunctions.Http.Business
{
public static class A_Dummy_Function
{
[FunctionName("A_Dummy_Function")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest request,
[CosmosDB(
databaseName: "DB-NAME-VALUE",
collectionName: "A-COLLECTION",
ConnectionStringSetting = BackendConfiguration.DB_CONNECTION_STRING)] out dynamic document,
ILogger log)
{
document = new { Description = "BLA BLA", id = Guid.NewGuid() };
ActionResult toReturn = (ActionResult) new OkObjectResult($"Hello world, this creates a new object!");
return toReturn;
}
}
}
您可以看到CosmosDB连接(绑定)由Function 2.x版本管理(实际上我安装了 Microsoft.Azure.WebJobs.Extensions.CosmosDB NuGet程序包),并且有以下参数在功能中:
[CosmosDB(
databaseName: "DB-NAME-VALUE",
collectionName: "A-COLLECTION",
ConnectionStringSetting = BackendConfiguration.DB_CONNECTION_STRING)] out dynamic document
当我尝试在Azure App Function资源上发布功能时,出现错误。
似乎无法将我的C#类转换为 function.json 。
您对我为什么不能远程发布此类功能有何建议?
答案 0 :(得分:3)
我宁愿使用IAsyncCollector
而不是out
。请参见here中的示例。
[FunctionName("WriteDocsIAsyncCollector")]
public static async Task Run(
[QueueTrigger("todoqueueforwritemulti")] ToDoItem[] toDoItemsIn,
[CosmosDB(
databaseName: "ToDoItems",
collectionName: "Items",
ConnectionStringSetting = "CosmosDBConnection")]
IAsyncCollector<ToDoItem> toDoItemsOut,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed {toDoItemsIn?.Length} items");
foreach (ToDoItem toDoItem in toDoItemsIn)
{
log.LogInformation($"Description={toDoItem.Description}");
await toDoItemsOut.AddAsync(toDoItem);
}
}
只需与您的HttpTrigger交换QueueTrigger。