【发布时间】:2020-08-13 12:57:56
【问题描述】:
尝试在我的 Web API (.Net Core 3.1) 上调用 PATCH 端点时收到 400 Bad Request,但我不知道为什么。我的操作方法如下所示:
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);
}
}
}
我用 Postman 把这个发给它:
{
"Op": "replace",
"Path": "/PropertyInspectId",
"Value": 10764
}
(我也试过用字符串“10764”代替整数)
(请看下图)
PropertyInspectId 是一个可为空的整数,并且肯定在模型中并且拼写正确。 我立即收到 400 错误响应 - 在我的 API 的操作方法甚至执行第一行代码之前。
有什么想法吗?
【问题讨论】:
-
你读过错误吗? JSON 补丁是一个数组。
-
感谢 CodeCaster。这确实是问题所在。为了回答您的问题,我确实阅读了错误,但错误只是说“发生了一个或多个验证错误。”。我没有看到任何提到它不是数组的问题。
-
再次感谢 CodeCaster,是的,确实帮助了我。老实说,我在谷歌上做了这个问题,但很遗憾我没有看到你发给我的页面。我不知道我怎么会错过那个页面......但无论如何,谢谢你。它现在正在工作
标签: asp.net-core asp.net-core-3.1 http-status-code-400 webapi http-patch