You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例,代码示例:
    using Azure.Messaging.EventGrid;
    using Newtonsoft.Json.Linq;
    
    [FunctionName("MyFuncEG")]
    public Task RunEventGrid([EventGridTrigger] JObject triggerData)
    {
        var eventGridEvent = EventGridEvent.Parse(BinaryData.FromString(triggerData.ToString()));
        // 后续业务逻辑
    }
    
    优势:无需自定义POCO类,可完整使用新版SDK的EventGridEvent所有能力,适配所有EventGrid schema场景。
  • 方案3:自定义EventGridEvent POCO类
    你也可以自行定义一个符合EventGrid schema结构、带默认构造函数的POCO类作为触发器参数类型,仅需匹配事件的字段结构即可正常反序列化。该方案适合需要固定强类型、且不需要使用新版SDK内置方法的场景,劣势是需要自行维护POCO类的字段同步。

内容的提问来源于stack exchange,提问作者SimonD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:27:03