具有双 [FromBody] 参数的操作

Dea*_*eer 1 c# asp.net-core

我在将 2 个参数传递给我的[HttpPut]方法时遇到问题。它们都标有[FromBody]属性,当我用 Postman 测试该方法时,它们都是空值。控制器通过让我进入方法做出正确反应,但我不知道如何编写正确的 JSON 主体以获得正确的响应。我不知道这是否是传递标记为 的 2 个参数的正确方法,[FromBody]或者是否可能/允许。一般来说,我想BitPosition通过传递旧对象并将其交换为新对象来更新我的对象。你能帮我吗 ?

[HttpPut]
public async Task<IActionResult> UpdateBitPosition([FromBody]BitPosition oldBitPosition, [FromBody]BitPosition newBitPosition)
{
    if (oldBitPosition == null || newBitPosition == null)
    {
        return BadRequest();
    }

    try
    {
        var bitPositionToUpdate = await _context.BitPositions.FirstOrDefaultAsync(bp => bp.IDPermission == oldBitPosition.IDPermission &&
                                                                                        bp.Position == oldBitPosition.Position);

        if (bitPositionToUpdate == null)
        {
            return NotFound();
        }

        bitPositionToUpdate.IDPermission = newBitPosition.IDPermission;
        bitPositionToUpdate.Position = newBitPosition.Position;

        _context.BitPositions.Update(bitPositionToUpdate);
        await _context.SaveChangesAsync();
        return new NoContentResult();
    }
    catch (Exception ex)
    {
        Helpers.ExceptionLogger.LogException(ex);
        return StatusCode(500);
    }
}
Run Code Online (Sandbox Code Playgroud)

luc*_*cky 5

根据文档

“每个动作最多可以有一个参数用 [FromBody] 修饰”

所以,我建议你像这样合并对象;

public class MergedBitPosition
{
    public BitPosition OldBitPosition { get; set; }

    public BitPosition NewBitPosition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该方法看起来像;

public async Task<IActionResult> UpdateBitPosition([FromBody]MergedBitPosition mergedBitPosition)
Run Code Online (Sandbox Code Playgroud)

示例 Json 请求应该是这样的;

{
   "OldBitPosition":{
      "IdPermission":8,
      "Position":1
   },
   "NewBitPosition":{
      "IdPermission":8,
      "Position":5
   }
}
Run Code Online (Sandbox Code Playgroud)