如何将队列触发的Azure函数绑定到自定义对象

ewm0tg9j  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(80)

在编写队列触发的Azure函数时,我读到,默认情况下,它需要一个base-64编码的字符串,但它也可以绑定到POCO。
使用方法参数(如string paramName)访问消息数据。paramName是QueueTriggerAttribute中指定的值。您可以绑定到以下任何类型:

  • 普通CLR对象(POCO)
  • string byte[]
  • QueueMessage

绑定到对象时,Functions运行时尝试将JSON有效负载反序列化为代码中定义的任意类的示例。
[文档]
当我尝试这个时,例外是...
输入不是有效的Base-64字符串,因为它包含一个非base 64字符、两个以上的填充字符或填充字符中的一个非法字符。
有趣的是,我读到过应该引用Microsoft.Azure.WebJobs.Extensions.Storage.Queues,但我找不到任何关于如何使用它的示例或文档。
我引用了NuGet包,Visual Studio现在将QueueTriggerAttribute下划线为不明确,因为它位于两个名称空间中;当我尝试完全限定它时,我找不到它。
在几个地方,我发现博客作者暗示使用...Extensions.Storage...绑定自定义对象,但我已经搜索了一个多小时,我找不到任何关于如何实现这一点的示例或清晰的文档。
我错过了一些简单的东西吗?

kuarbcqp

kuarbcqp1#

在编写队列触发的Azure函数时,我读到,默认情况下,它需要一个base-64编码的字符串,但它也可以绑定到POCO。
正确,但是为了绑定到POCO,消息仍然必须是包含有效JSON的base64编码字符串,该字符串可用于反序列化为POCO类的示例。
您可以尝试使用例如存储资源管理器:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace FunctionApp3
{
    public class Function
    {
        [FunctionName("Function")]
        public void Run([QueueTrigger("queue", Connection = "MyConn")] MyObject myQueueItem, ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {myQueueItem.Name}");
        }
    }

    public class MyObject
    {
        public string Name { get; set; }
    }
}

相关问题