模型绑定不适用于嵌套对象

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]。令人惊讶的是,这实际上适用于IdDescription,但也许出于某种原因它根本不适用于IFormFile。看起来很奇怪,但老实说我没有看到任何其他问题。 @ChrisPratt 我也尝试过这样的 Subvariants[0].Document 但仍然为空,是的,确实我也没有得到这里的问题。这是 asp.net webapi 核心中的错误吗模型粘合剂? 一点也不。这是非常的基本代码,我几乎就像这样运行代码。只要帖子正文中的名称遵循正确的绑定约定(这些约定似乎如此),它就会绑定。 @ChrisPratt 那为什么现在不起作用。可能是您没有在嵌套模型中使用 IFormFile。有什么解决方案吗? 我刚刚用ASP.NET Core 2.0 测试了你的代码,一切对我来说都很好。您能否在 github 上分享您的项目并分享您通过 postman 执行的请求? 【参考方案1】:

这也是我遇到的问题。在 .NET Core v2.2 中将 IFormFile 作为视图模型属性嵌套是一个已知问题。

对我有用的修复是here。

【讨论】:

以上是关于模型绑定不适用于嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章

模型绑定不适用于angular2中的选择[重复]

ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据

模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求

MVC4 webapi中的反序列化/模型绑定不适用于数组

复杂抽象对象的WebAPI自定义模型绑定

RxUI ObservableAsPropertyHelper 不适用于 XAML 绑定