Azure函数使用Azure.Messaging.EventGrid接收EventGridEvent报错如何解决?
Azure函数EventGridTrigger适配Azure.Messaging.EventGrid包的解决方案
官方更新状态
截至目前,Azure Functions官方尚未推出原生支持Azure.Messaging.EventGrid.EventGridEvent类型的EventGridTrigger绑定更新,报错的核心原因是新版SDK的EventGridEvent没有提供触发器绑定所需的默认公开构造函数,无法被内置的JSON序列化器直接反序列化。
可行方案(按推荐优先级排序)
- 方案1:切换使用CloudEvent类型(首选)
这是官方现阶段推荐的替代方案,当前绝大多数Azure服务的EventGrid事件源都支持配置为CloudEvent schema输出。仅需修改触发器参数类型即可正常运行,代码示例:
优势:无需额外自定义代码,维护成本最低;已知限制仅存在于部分极端自定义属性解析场景,常规业务开发无影响。[FunctionName("MyFuncEG")] public Task RunEventGrid([EventGridTrigger] CloudEvent data) - 方案2:自行反序列化触发数据
如果你必须使用EventGrid原生schema、无法切换CloudEvent,可以选择将触发器参数改为JObject或者二进制类型,自行调用新版SDK的解析方法生成EventGridEvent实例,代码示例:
优势:无需自定义POCO类,可完整使用新版SDK的using Azure.Messaging.EventGrid; using Newtonsoft.Json.Linq; [FunctionName("MyFuncEG")] public Task RunEventGrid([EventGridTrigger] JObject triggerData) { var eventGridEvent = EventGridEvent.Parse(BinaryData.FromString(triggerData.ToString())); // 后续业务逻辑 }EventGridEvent所有能力,适配所有EventGrid schema场景。 - 方案3:自定义EventGridEvent POCO类
你也可以自行定义一个符合EventGrid schema结构、带默认构造函数的POCO类作为触发器参数类型,仅需匹配事件的字段结构即可正常反序列化。该方案适合需要固定强类型、且不需要使用新版SDK内置方法的场景,劣势是需要自行维护POCO类的字段同步。
内容的提问来源于stack exchange,提问作者SimonD
相关产品推荐
相关产品推荐

