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

.NET无法自动反序列化Microsoft.Azure.EventGrid.EventGridEvent问题

解决Azure EventGrid Webhook反序列化异常问题

看起来你踩了两个常见的EventGrid webhook反序列化坑,我来帮你一步步解决:

问题1:请求体是事件数组,但Action接收单个对象

Azure EventGrid发送的请求体永远是EventGridEvent的数组(哪怕只有一个事件),但你的Action参数定义的是单个EventGridEvent。模型绑定无法把数组映射到单个对象,这就导致大部分属性绑定失败,最终只有值类型的eventTime(DateTime有默认值)看起来"成功",其余引用类型属性全是null。

修复方案:修改Action接收数组

把参数改成List<EventGridEvent>或者数组类型,遍历处理每个事件:

[HttpPost]
public async Task<OkObjectResult> Post(List<EventGridEvent> gridEvents)
{
    foreach (var gridEvent in gridEvents)
    {
        if (gridEvent.EventType == EventTypes.EventGridSubscriptionValidationEvent)
        {
            var eventData = (SubscriptionValidationEventData)gridEvent.Data;
            var responseData = new SubscriptionValidationResponse()
            {
                ValidationResponse = eventData.ValidationCode
            };
            return new OkObjectResult(responseData);
        }
        if (gridEvent.EventType == EventTypes.StorageBlobCreatedEvent)
        {
            var eventData = (StorageBlobCreatedEventData)gridEvent.Data;
            // 你的Blob处理逻辑:获取文件、验证、分发事件等
        }
    }
    return new OkObjectResult(string.Empty);
}

问题2:JSON序列化器不匹配

你注意到EventGridEvent类用了Newtonsoft.Json的[JsonProperty]特性,但ASP.NET Core默认使用System.Text.Json做模型绑定。这两个序列化器不兼容,System.Text.Json无法识别JsonProperty的属性名映射配置,也会导致属性绑定失败。

修复方案:切换到Newtonsoft.Json

在项目的Program.cs(或Startup.cs)中配置使用Newtonsoft.Json处理控制器的JSON序列化:

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// 添加控制器并指定使用Newtonsoft.Json
builder.Services.AddControllers()
    .AddNewtonsoftJson();

var app = builder.Build();

// 其他中间件配置...
app.MapControllers();
app.Run();

验证测试

完成以上两个修改后,用Postman发送原数组格式的请求体,此时每个EventGridEvent的所有属性(Topic、Subject、EventType、Data等)都会正确反序列化,你可以正常处理订阅验证和Blob创建事件了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:18:14