【发布时间】:2022-01-18 08:01:39
【问题描述】:
我正在编写一个简单的 API,其中包括一个 POST 方法,用于将新记录插入到几个数据库表中。数据来自表单数据。
其中一项是包含几个字段的集合。
我正在使用 Swagger 进行测试,当我发布表单数据时,收集字段为空白。
控制器 - 发布端点
[HttpPost("addboardmember")]
public IActionResult PostBoardMember([FromForm] MemberForm memberData)
{
try
{
_memberRepository.PostBoardMember(memberData);
var newMember = _memberRepository.GetMembers().SingleOrDefault(m => m.SSN == memberData.SSN);
var newMemberId = newMember.Member_ID;
var boardArray = memberData.BoardForms;
return Ok();
//return Ok() is temporary, will return 201 with appropriate data
}
catch (Exception ex)
{
return BadRequest("Couldn't Save record??" + ex.InnerException.ToString());
}
}
MemberForm 类(缩写以突出显示主要字段和我正在努力填充的字段:BoardForms
public class MemberForm
{
[Required, NotNull]
public string LastName { get; set; }
[Required, NotNull]
public string FirstName { get; set; }
[Required, NotNull]
public string SSN {get; set;}
public virtual ICollection<BoardForm> BoardForms { get; set; }
}
}
BoardForm 类:
public class BoardForm
{
public int Board_ID { get; set; }
public int StartYear { get; set; }
public int EndYear { get; set; }
}
当我使用 Swagger 测试 Post API 端点时,BoardForms 字段的计数为零。
大摇大摆的输入。
我将有额外的业务逻辑来根据 BoardForm 数组中的每条记录创建记录。
我不知道我应该如何访问设置为 ICollection 的表单数据中发送的数组。
上面显示的有效负载屏幕截图中的所有元素都映射到它们的正确元素,我可以看到除“BoardForms”数组之外的值。
【问题讨论】:
-
问:您是否在 MSVS 调试器或 Chrome/Edge 开发工具中查看过实际的 HTTP 级请求/响应?当您“保存”表单时,您的“发布”处理程序究竟接收了哪些(如果有)数据?问:您是否查看过 SSMS(或等效的)以查看哪些数据正在保存到数据库中?
-
我正在接收所有其他字段的数据,并且我验证了我的 API 可以将这些数据写入数据库表。在包含的屏幕截图中,电子邮件字段显示输入的数据。我的大部分字段目前都是选项,所以我将它们留空。当我从浏览器开发人员工具中添加一个屏幕截图时,它显示了正在发送的有效负载。我可以访问除 BoardForms 字段之外的所有字段。当我在 API 运行时查看 Visual Studio 的值时,我看到 BoardForms 的计数为 0。
标签: asp.net-core