模型绑定不适用于嵌套对象
Posted
技术标签:
【中文标题】模型绑定不适用于嵌套对象【英文标题】:Model binding not working for nested object 【发布时间】:2019-08-27 11:26:34 【问题描述】:我正在尝试在我的模型中绑定从邮递员发布的模型中的数据:
public class VariantModel
public int Id get; set;
public List<SubvariantModel> Subvariants get; set;
public class SubvariantModel
public int Id get; set;
public string Description get; set;
public IFormFile Document get; set;
每个属性都被填充,但只有 Document
属性变为空,如您在此处看到的:
但令人惊讶的是,当我检查 http 请求对象时,我看到了该文件:
这就是我从 POSTMAN 发布数据的方式:
代码:
[HttpPost]
public void Post([FromForm]VariantModel emp)
var d = HttpContext.Request;
谁能告诉我这里可能是什么问题?
更新:
【问题讨论】:
你的键名很奇怪。名字应该是Subvariants[0].Document
,而不是Subvariants[0][Document]
。令人惊讶的是,这实际上适用于Id
和Description
,但也许出于某种原因它根本不适用于IFormFile
。看起来很奇怪,但老实说我没有看到任何其他问题。
@ChrisPratt 我也尝试过这样的 Subvariants[0].Document 但仍然为空,是的,确实我也没有得到这里的问题。这是 asp.net webapi 核心中的错误吗模型粘合剂?
一点也不。这是非常的基本代码,我几乎就像这样运行代码。只要帖子正文中的名称遵循正确的绑定约定(这些约定似乎如此),它就会绑定。
@ChrisPratt 那为什么现在不起作用。可能是您没有在嵌套模型中使用 IFormFile。有什么解决方案吗?
我刚刚用ASP.NET Core 2.0
测试了你的代码,一切对我来说都很好。您能否在 github 上分享您的项目并分享您通过 postman 执行的请求?
【参考方案1】:
这也是我遇到的问题。在 .NET Core v2.2 中将 IFormFile 作为视图模型属性嵌套是一个已知问题。
对我有用的修复是here。
【讨论】:
以上是关于模型绑定不适用于嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据