C# Azure函数.NET5(独立)在使用[EventGridTrigger]EventGridEvent作为参数时引发

C# Azure函数.NET5(独立)在使用[EventGridTrigger]EventGridEvent作为参数时引发,c#,azure-functions,C#,Azure Functions,升级到.NET5 for Azure函数后,此签名引发以下异常 我已经根据这里的文档实现了它 System.NotSupportedException:'不带 无参数构造函数、奇异参数化构造函数或 使用“JsonConstructorAttribute”注释的参数化构造函数是 不支持。键入“Azure.Messaging.EventGrid.EventGridEvent”。路径: $|行号:0 |字节位置行:1。' 如何从EventGrid接收事件?新的方法似乎是从Azure.Messaging

升级到.NET5 for Azure函数后,此签名引发以下异常

我已经根据这里的文档实现了它

System.NotSupportedException:'不带 无参数构造函数、奇异参数化构造函数或 使用“JsonConstructorAttribute”注释的参数化构造函数是 不支持。键入“Azure.Messaging.EventGrid.EventGridEvent”。路径: $|行号:0 |字节位置行:1。'


如何从EventGrid接收事件?

新的方法似乎是从
Azure.Messaging
命名空间接收
CloudEvent

(需要注意的是,数据属性区分大小写,我不确定它们以前是否区分大小写。)

更新:

当部署到Azure并从实际的事件网格接收事件(以Azure函数作为终结点)时,这会中断。但在使用ngrok和webhook进行本地测试时效果良好。回到原点

在没完没了地搜索过时的示例之后,我在这里找到了一个注释,指出需要创建自定义类型(看起来就像EventGridEvent)

经过测试,我发现这确实有效:

传递
字符串而不是
EventGridEvent
,并使用
EventGridEvent
中的实用函数分析实际事件

[Function(nameof(CustomerCreated))]
public async Task CustomerCreated([EventGridTrigger] string data, FunctionContext functionContext)
{
    var eventGridEvent = EventGridEvent.Parse(BinaryData.FromString(data));
    
    // Rest of code
}
另一个相关的警告是,您不能从门户创建函数,但需要从命令行运行它,如:

az eventgrid event-subscription create --name customer-created \
    --source-resource-id <event-grid-topic-resource-id> \
    --endpoint <azure-func-resource-id> --endpoint-type azurefunction
az eventgrid事件订阅创建--创建的客户名称\
--源资源id\
--终点)

你好,微软

在.NET5上运行Azure函数感觉不太适合这种方法。我真的希望能够通过官方库从其他Azure服务传递类型化对象,如EventGridEvent

我真的认为.NET5/dotnet上的EventGridEvent应该与Azure函数在与以前的.NET版本和公共示例相同的级别上兼容

[Function(nameof(CustomerCreated))]
public async Task CustomerCreated([EventGridTrigger] string data, FunctionContext functionContext)
{
    var eventGridEvent = EventGridEvent.Parse(BinaryData.FromString(data));
    
    // Rest of code
}
az eventgrid event-subscription create --name customer-created \
    --source-resource-id <event-grid-topic-resource-id> \
    --endpoint <azure-func-resource-id> --endpoint-type azurefunction