我试图在.NET Core Web API中为包含外键的数据库表创建POST、PATCH和PUT方法。我不确定问题是出在我的方法上,还是出在我在swagger上测试我的方法的方式上。我的方法对于同一个数据库中不包含外键的表工作得很好。
我的DB表托管在SQL Server上,并将CustomerId作为外键。当我在Swagger上测试我的POST方法时,我收到一个400错误,指出“The Customer field is required”。
My Request Body on Swagger
The error message I receive
Visual Studio中的POST方法如下:
[HttpPost]
public async Task<ActionResult<Order>> PostOrder(Order order)
{
if (_context.Orders == null)
{
return Problem("Entity set 'ecopowerdatabaseContext.Orders' is null.");
}
_context.Orders.Add(order);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (OrderExists(order.OrderId))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtAction("GetOrder", new { id = order.OrderId }, order);
}
我已经修改了请求主体,以包括引用的客户字段的所有信息,但当我这样做时,我得到了一个冲突错误,因为它试图用已经存在的ID发布到客户表。
2条答案
按热度按时间t8e9dugd1#
在填充订单之前,您必须首先检索Customer实体。
所以,你可以像这样编辑你的方法:
zbwhf8kr2#
我找到了解决办法。如果我将订单所需的字段添加到方法的输入参数中,以便在Swagger中将它们显式地输入到它们自己的单独文本框中,那么问题似乎就解决了。而不是将订单对象作为输入参数-因为对象还不存在。然后,我在方法中创建一个新的Order对象,并在将新的order对象传递给Add()方法之前分配所有必需的属性。正确的代码如下: