我在 .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 属性。我无法绑定此属性的主要内容,如果未能解决你的问题,请参考以下文章
同一解决方案中两个 ASP.NET Core 项目之间的通信