【问题标题】:Azure Function error for REST Api using Table Storage使用表存储的 REST Api 的 Azure 函数错误
【发布时间】:2020-04-07 20:08:00
【问题描述】:

您好,我正在尝试使用 REST Api 的简单 Azure 函数。 我的环境是 MSVC 2019 并创建了一个简单的 mmApi Fucntion 应用程序

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using AzureFuncApp.Model;
using System.Collections.Generic;
using Microsoft.WindowsAzure.Storage.Table;
using Microsoft.WindowsAzure.Storage;

namespace AzureFuncApp
{
    public static class mmApi
    {
        //static List<Board> boards = new List<Board>();

        [FunctionName("CreateBoard")]
        public static async Task<IActionResult> CreateBoard(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "board")] HttpRequest req,
            [Table("boards", Connection ="AzureWebJobsStorage")] IAsyncCollector<BoardTableEntity> boardTable,
            ILogger log)
        {
            log.LogInformation("Creating a new board.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var input = JsonConvert.DeserializeObject<BoardCreateModel>(requestBody);
            var board = new Board() { PlayerCount = input.PlayerCount };
            board.Players.Add(input.Player);
            await boardTable.AddAsync(board.ToTableEntity());
            return new OkObjectResult(board);
        }

这是我添加到表存储的这一行 [Table("boards", Connection ="AzureWebJobsStorage")] IAsyncCollector

抛出以下错误

函数 (AzureFuncAppmmApi/CreateBoard) 错误: Microsoft.Azure.WebJobs.Host:索引方法“CreateBoard”出错。 Microsoft.Azure.WebJobs.Host:无法将参数“boardTable”绑定到 输入 IAsyncCollector`1。确保参数类型受支持 绑定。如果您使用绑定扩展(例如 Azure 存储, ServiceBus、Timers 等)确保你已经调用了注册 启动代码中扩展的方法(例如 builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() 等)。

我没有关注的是,当我的项目中没有启动文件时,我应该在哪里注册 builder.AddAzureStorage()

附件是我的项目详细信息,任何帮助和指针都可以使用

【问题讨论】:

  • 静态列表存储 //static List board = new List();工作正常
  • 我会尝试绑定到 CloudTable 而不是 IAsyncCollector 看看这是否有效。在我的项目中工作的 Microsoft.Azure.WebJobs.Extensions.Storage 版本也是 3.0.5。你能试试降级到那个有效吗?
  • 还可以尝试删除对 Microsoft.Azure.WebJobs 和 Microsoft.Azure.WebJobs.Core 的 nuget 引用。根据我的经验,引用额外的包会引起很多麻烦。
  • [12/14/2019 10:19:24 PM]“GetBoards”函数出错:Microsoft.Azure.WebJobs.Host:错误索引方法“GetBoards”。 Microsoft.Azure.WebJobs.Host:无法将参数“boardTable”绑定到类型 CloudTable。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。我确实有一个使用 Cloud 的 GET api 我仍然收到错误
  • 我还删除了 Microsoft.Azure.WebJobs 和 Microsoft.Azure.WebJobs.Core,仍然没有运气

标签: azure azure-functions azure-table-storage


【解决方案1】:

我找到了答案,Microsoft.NET.Sdk.Functions 更新到 v3.0.2,在 csprog 文件中手动添加了以下引用,它工作正常。 @tubakaya 你的建议有帮助

    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.23" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.1" />   </ItemGroup>```

【讨论】:

  • 很高兴听到问题已解决。尽管我发现这些参考文献的脆弱性非常令人沮丧。文档通常不清楚哪个版本的 sdk 与哪个扩展包版本一起使用。
  • 顺便说一句,如果你能支持我的评论,我将不胜感激。谢谢
  • 我做到了,因为从 1.0* 到 3.0*,每个库 r 以不同方式推出,因此问题
  • 这解决了问题,但随后部署停止并显示“发布遇到错误。我们无法确定错误的原因。请查看输出日志了解更多详细信息”
猜你喜欢
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2018-12-06
  • 2020-08-09
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多