我在 .net 5 api 应用程序中有两个具有一对多关系的模型。子模型包含 IFormFile 属性。我无法绑定此属性

Posted

技术标签:

【中文标题】我在 .net 5 api 应用程序中有两个具有一对多关系的模型。子模型包含 IFormFile 属性。我无法绑定此属性【英文标题】:I have two models in .net5 api application with one to many relationship. child model contains IFormFile property. I cannot bind this property 【发布时间】:2021-12-26 21:29:26 【问题描述】:

这是我的模型

public class Category

    public int Id  get; set; 
    public string Name  get; set; 

    public List<CategoryDetail> CategoryDetails  get; set; 


public class CategoryDetail

    public int Id  get; set; 
    public string Url  get; set; 
    public IFormFile File  get; set; 
    public Category Category  get; set; 

我的控制器功能是

    [HttpPost]
    public IActionResult Create([FromForm] Category category)
    
        throw new NotImplementedException();
    

当我通过邮递员传递数据时,控制器方法内的参数始终为空。

【问题讨论】:

需要解析multipart/formdata请求,看看这个***.com/questions/34979051/… 【参考方案1】:

不能将两种不同的内容类型数据传递到后端。

您的密钥名称错误,应该是CategoryDetails[0].File 而不是CategoryDetails[0].files。键名应与属性名匹配,并且不区分大小写。

正确的方法应该如下:

注意:

如果您发布的CategoryDetails 仅具有File 属性,则需要确保删除[ApiController][FromForm] 属性。这里是a known github issue。如果您发布带有多个属性的CategoryDetails,则无需删除任何属性。

【讨论】:

感谢瑞纳的合作。它现在可以工作了。 我还为不同的键设置了不同的内容类型,它工作正常 嗨@UttamKar,你在哪里设置的?你的意思是你在Value旁边设置CONTENT TYPE。也许我没有向你解释清楚。表单数据面板中的CONTENT TYPE 不用于设置内容类型。它就像评论一样。 cannot pass two different content type data 表示您将category 键设置为json 字符串,并将CategoryDetails[0].File 键设置为multipart/form-data 类型数据。模型绑定无法使用两种不同的内容类型数据自动绑定模型。 感谢@Rena 的解释。我明白了“不能传递两种不同的内容类型数据”是什么意思。

以上是关于我在 .net 5 api 应用程序中有两个具有一对多关系的模型。子模型包含 IFormFile 属性。我无法绑定此属性的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 5 Web Api 服务对象共享和引用

ASP.NET 5 中的 Web API 身份验证

同一解决方案中两个 ASP.NET Core 项目之间的通信

为啥我在具有不同哈希的两个分支中有相同的提交

在 asp.net 5.0 web api 项目中访问中间件中的 TempData

如何在招摇中访问图形api?