索引方法“Function1”出错。无法将参数“文档”绑定到 IAsyncCollector 类型`

问题描述 投票:0回答:2

我收到 Microsoft.Azure.WebJobs.Host 的 Azure 函数错误。在我的函数中,我使用 CosmosDB。在调试/本地中它的工作完美,但是当我在门户中打开我的函数时,我收到此错误。

函数(LOANGILITY-AZFUNCTION/ProductDetailsFunc)错误: Microsoft.Azure.WebJobs.Host:索引方法错误 '产品详细信息功能'。 Microsoft.Azure.WebJobs.Host:无法绑定 参数“文档”类型为 IAsyncCollector`1。确保 绑定支持参数类型。如果您使用绑定 扩展(例如 Azure 存储、ServiceBus、计时器等)确保 您已在您的中调用了扩展程序的注册方法 启动代码(例如 builder.AddAzureStorage()、builder.AddServiceBus()、 builder.AddTimers() 等)。

我的函数头原型是

public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
        [DocumentDB(
            databaseName: "OB",
            collectionName: "ProductDetails",
            ConnectionStringSetting = "DBConnection")]IAsyncCollector<dynamic> document,
        TraceWriter log)

从我的代码生成的 json 是

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.13",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "methods": [
        "get",
        "post"
      ],
      "authLevel": "anonymous",
      "name": "req"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/Loangility01.dll",
  "entryPoint": "Loangility01.ProductDetailsFunc.Run"
}

我还看到了其他一些SO问题,他们在代码中谈论

builder.something
,我没有在.Net Core Azure Function上工作,我的目标项目框架是
4.6.1

c# azure azure-functions azure-cosmosdb azure-webjobs
2个回答
4
投票

根据我的测试,我们可以通过Visual Studio直接将Function部署到Azure上。但我们需要在 local.settings.json 中手动配置一些设置,例如 Cosmos Db 连接字符串。详细步骤如下

  1. 开发 我的代码:
 public static class Function2
    {
        [FunctionName("Function2")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]IAsyncCollector<dynamic> toDoItemsOut, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            // parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            if (name == null)
            {
                // Get request body
                dynamic data = await req.Content.ReadAsAsync<object>();
                name = data?.name;
            }
            HttpResponseMessage response ;



            if (name == null) {
                response = req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body");

            }
            else {

                response= req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
            }
            await toDoItemsOut.AddAsync(response.Content);
            return response;
        }
    }
  1. 部署到 Azure

  2. 配置应用程序设置

  1. 测试

更新 关于此问题,可能是您没有将 cosmos db 连接字符串添加到应用程序设置中。请检查您是否已添加。

如果你添加了它,你仍然有错误。您检查日志以获取详细的错误消息。


1
投票

我们需要照顾的事情很少。

  1. 即使在 Cosmos DB v1 中,您也必须手动安装知道如何与 CosmosDB 集成的扩展。该文档链接到要安装到项目中的包 link
  2. 默认情况下,我们在Azure Portal中创建Azure函数时,版本是2;当我们使用 v1 Azure 函数时,我们需要手动配置 v1 link
© www.soinside.com 2019 - 2024. All rights reserved.