能否在Dataverse多对多关联的Dynamics WebApi请求中传递ExtensionData?
关于Dataverse多对多关联传递额外字段的问题解答
结论:不能通过$ref请求体传入ExtensionData传递额外字段
你尝试在$ref端点的请求体里添加ExtensionData的方式不可行,原因如下:
$ref是OData标准中仅用于建立实体关联关系的端点,Dataverse只认可请求体里的@odata.context和@odata.id两个属性,自定义的ExtensionData字段会被系统直接忽略,不会传递到插件的EntityReference对象中。- 插件调试时看到的
EntityReference.ExtensionData是系统内部序列化过程中产生的属性,并非用于接收自定义请求参数的入口。
正确的做法:直接操作多对多关系的中间实体
带有额外字段的自定义多对多关系,本质是Dataverse自动生成的中间连接实体(比如你的new_class_new_student关系对应的中间实体,名称通常和关系名一致),你需要直接对这个中间实体执行Create操作来同时建立关联并设置额外字段:
示例请求
请求地址:
POST https://mysite.dynamics.com/api/data/v9.0/new_class_new_student
请求体(替换为实际的字段名和值,日期需用ISO 8601格式):
{ "new_class@odata.bind": "/new_classes(649c332d-ca46-ee11-be6f-00224894adf7)", "new_student@odata.bind": "/new_students(574af921-62f8-ec11-813d-005056893571)", "new_startdate": "2023-12-12" }
插件适配建议
- 把原有的Associate消息插件,改为注册在中间实体的Create消息上,这样插件可以直接获取到完整的中间实体记录,通过
Entity["new_startdate"]就能读取到传入的额外字段值。 - 如果必须保留Associate消息插件,可通过自定义请求头传递额外数据:
- 请求时添加自定义头,比如
X-StartDate: 2023-12-12 - 插件中通过
context.RequestHeaders["X-StartDate"]获取对应值,但这种方式不符合Dataverse的设计规范,仅作为临时替代方案。
- 请求时添加自定义头,比如
内容的提问来源于stack exchange,提问作者strattonn
相关产品推荐
相关产品推荐

