我在将 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)
根据文档
“每个动作最多可以有一个参数用 [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)
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |