.NET5 Core API Post请求[FromForm]无法接收Dictionary而[FromBody]正常问题
问题原因分析
请求Content-Type与
[FromForm]绑定要求不匹配[FromForm]特性仅用于解析application/x-www-form-urlencoded(普通表单)或multipart/form-data(带文件表单)格式的请求数据。你当前通过Swagger发送的是JSON结构的请求,默认Content-Type为application/json,这类请求仅会被[FromBody]对应的JSON序列化器处理,[FromForm]的表单绑定器不会解析JSON内容,因此无法读取到参数值,导致DeviceDetails属性为null。表单格式下Dictionary的绑定规则与JSON不同
即便你将请求改为表单格式提交,也不能直接传入JSON嵌套结构。ASP.NET Core的表单绑定器对字典类型参数有固定的格式要求:
字典的键需要遵循
属性名[字典键名]的命名规则,对应的值为字典项的value。
比如你要传递的DeviceDetails字典,需要按如下格式构造表单字段:
DeviceDetails[additionalProp1] = "string" DeviceDetails[additionalProp2] = "string" DeviceDetails[additionalProp3] = "string"
只有符合上述格式的表单数据,绑定器才能正确映射到RequestExample的DeviceDetails字典属性中。
验证方法
你可以按如下步骤验证[FromForm]接口的绑定逻辑:
- 在Swagger的
MyFromForm接口请求页,将请求格式切换为multipart/form-data或application/x-www-form-urlencoded - 按照
DeviceDetails[键名]的格式逐个添加表单字段和对应值 - 发送请求即可看到DeviceDetails可以正常被绑定
内容的提问来源于stack exchange,提问作者Gurpreet Kailey
相关产品推荐
相关产品推荐

