当前位置: 首页 > 知识库问答 >
问题:

使用[EventGridTrigger]EventGridEvent作为参数时,Azure函数.NET5(隔离)抛出

东方文林
2023-03-14

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

Bash我已经按照留档https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid-trigger?tabs=csharp执行了

 [Function(nameof(CustomerCreated))]
 public async Task CustomerCreated([EventGridTrigger] EventGridEvent eventGridEvent, FunctionContext functionContext)
 {

   // My implementation

 }

系统。NotSupportedException:“不支持对没有无参数构造函数、单一参数化构造函数或用“JsonConstructorAttribute”批注的参数化构造函数的类型进行反序列化。键入“Azure”。messaging . event grid . eventgridevent。路径:$ |行号:0 |字节位置行:1。

如何从EventGrid接收事件?

共有1个答案

张亦
2023-03-14

html" target="_blank">执行此操作的新方法似乎是Azure.Messaging命名空间中的CloudEvent

(附带说明一下,数据属性是区分大小写的,我不确定以前是不是。)

public async Task CustomerCreated([EventGridTrigger] CloudEvent eventGridEvent, FunctionContext functionContext)
{
     // [...]
}

更新:

当部署到Azure并从具有Azure功能作为endpoint的真实事件网格接收事件时,这会中断。但在使用ngrok和webhook进行本地测试时,效果良好。回到原点。

在对过时的示例进行了无休止的谷歌搜索之后,我在本文档中发现了一个注释,指向此示例,表明您需要创建自定义类型(看起来就像EventGridEvent一样)。

经过测试,我发现这实际上是有效的:

传递一个< code>string而不是< code>EventGridEvent,并使用< code>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

(可以在http://resources.azure.com/找到资源id:s)

你好,微软;

用这种方法在. NET5上运行Azure函数感觉不是很GA。我真的希望能够用官方库传递来自其他Azure服务的EventGridEvent之类的类型化对象。

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

 类似资料:
  • 问题内容: 如何使用Python列表(例如)作为函数的参数,例如: 问题答案: 您可以使用splat运算符执行此操作: 这使函数将每个列表项作为单独的参数接收。这里有一个描述:http : //docs.python.org/tutorial/controlflow.html#unpacking- argument-lists

  • 我是Kotlin的新手,很难理解下面的代码 所以这个函数叫做,它的输入参数是一个名为的函数,它是

  • 函数可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。下面是一个将函数作为参数的简单例子(function_parameter.go): package main import ( "fmt" ) func main() { callback(1, Add) } func Add(a, b int) { fmt.Printf("The sum

  • 如果我不使用' a '和' b '变量,一切正常,否则,C返回: 错误:无法转换“main()::” 注意:初始化'void f(int, void(*)(int))'的参数2

  • 我创建了一个从HashMap中删除学生的方法。当id为NULL时,它会抛出一个异常。有人知道它为什么不起作用吗? 公共类应用程序{public static void main(String[]args){ }