【问题标题】:Getting a 400 Bad Request error when trying to call PATCH endpoint on .Net Core 3.1 Web API [duplicate]尝试在 .Net Core 3.1 Web API 上调用 PATCH 端点时出现 400 Bad Request 错误[重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2015-11-16
    • 2022-12-14
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多