问题描述
尝试在Web API(.Net Core 3.1)上调用PATCH终结点时收到 400错误的请求,但我不知道为什么。我的动作方法如下:
using Microsoft.AspNetCore.JsonPatch;
namespace PropWorx.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OwnersController : ControllerBase
[HttpPatch("{id:int}")]
public async Task<ActionResult<Owner>> PatchOwner([FromRoute] int id,[FromBody] JsonPatchDocument<Owner> patchDoc)
{
if (patchDoc == null)
return BadRequest(ModelState);
var owner = await _context.Owners.FindAsync(id);
if (owner == null)
{
return NotFound();
}
patchDoc.ApplyTo(owner,ModelState);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _context.SaveChangesAsync();
return new ObjectResult(owner);
}
}
}
我将其发送给邮递员
{
"Op": "replace","Path": "/PropertyInspectId","Value": 10764
}
(我也尝试使用字符串“ 10764”而不是整数)
(请参见下图)
PropertyInspectId是可为空的整数,并且绝对存在于模型中并正确拼写。 在API的action方法甚至执行第一行代码之前,我会立即收到400错误响应。
有什么想法吗?
解决方法
根据@CodeCaster的评论,问题在于JSON PATCH是一个数组。我是通过邮递员的一个实体发送的。使用此链接CodeCaster的用户向我提供了相同的问题:An error when sending PATCH with Postman to Asp.net Core webapi