尝试在.Net Core 3.1 Web API上调用PATCH端点时收到400 Bad Request错误

问题描述

尝试在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错误响应。

enter image description here

有什么想法吗?

解决方法

根据@CodeCaster的评论,问题在于JSON PATCH是一个数组。我是通过邮递员的一个实体发送的。使用此链接CodeCaster的用户向我提供了相同的问题:An error when sending PATCH with Postman to Asp.net Core webapi