当传入通知具有不同的JSON结构时,我如何在MVC 5中编写控制器方法



我正试图在MVC 5中编写一个webhook接收服务,以接收来自GoToConnect webapi的通知。

来自服务器的webhook通知具有标准的包装结构。

{
"source": "messaging",
"type": "message",
"content": {object}
}

然而,内容值可以是多种类型的通知中的一种,这些通知都具有不同的结构,这些结构可以由";类型";领域我的问题是,当传入的json结构可能完全不同时,找到一种进行模型绑定的方法。

如果我可以访问原始json文件,我可以使用switch语句根据类型值手动反序列化传入内容,但我很难找到简单的方法。是否已经有一种方法可以控制模型绑定,这样我就可以选择创建的对象,然后使用继承将它们组合在一起,或者是否有一种简单的方法可以将原始json作为控制器方法的参数?

因此,通过更多的研究,我找到了问题的答案。

首先,我为每个通知内容类型创建了一个类,其中有一个空的标记接口,还有一个包含Type和该接口类型的属性的包装类。

然后,我通过扩展DefaultModelBinder类构建了一个自定义模型绑定器。在BindModel方法中,我使用传入通知的Type值来实例化我想要的特定NotificationContent对象。我将该对象存储在Interface type属性中,然后返回它

之后,我可以通过在控制器方法中将Interface Type属性强制转换为我想要的特定类型来访问该数据。

最新更新