You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.net Core 2.1中使用HttpClient发PATCH请求返回400错误如何解决

排查与解决步骤

1. 验证JsonPatch序列化格式合法性

标准JsonPatch请求体为数组结构,示例如下:

[
  {
    "op": "replace",
    "path": "/name",
    "value": "修改后的名称"
  }
]

你可以先断点查看serializedDoc的输出内容,确认两个点:

  • 是否为标准数组结构,没有多余的外层包裹对象
  • 路径字段的大小写是否和后端接口要求匹配,如果后端要求驼峰命名,需要在序列化时添加驼峰配置,修改代码如下:
var serializedDoc = JsonConvert.SerializeObject(patchDoc, new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
});

2. 修正请求头配置

你当前配置的Accept头为业务自定义媒体类型,部分API要求PATCH请求同时兼容json-patch的媒体类型,可修改Accept头配置:

// 先添加json-patch的可接受类型
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json-patch+json"));
// 再添加业务自定义的媒体类型
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.yellowfin.api-v1.3+json"));

3. 校验授权头格式

你当前用逗号拼接多值授权头的方式不符合通用标准,多数服务端会直接拒绝这类格式错误的授权头并返回400,可先修改为标准的Bearer令牌格式测试:

_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.SecurityToken);

4. 若你有权限访问后端接口,检查JsonPatch支持配置

ASP.NET Core 2.1默认不集成JsonPatch支持,需要手动配置:

  1. 安装Microsoft.AspNetCore.JsonPatch、Microsoft.AspNetCore.Mvc.NewtonsoftJson两个NuGet包
  2. 在Startup.cs的ConfigureServices方法中添加NewtonsoftJson支持:
services.AddMvc()
    .AddNewtonsoftJson();
  1. 确认PATCH接口的参数配置正确:
[HttpPatch("api/orgs/{clientRefId}")]
public IActionResult UpdateOrg(int clientRefId, [FromBody] JsonPatchDocument<ClientOrganisationRequestArgs> patchDoc)
{
    // 业务逻辑
}

5. 排查Postman 500错误

Postman返回500说明请求已经到达服务端,但服务端处理时抛出运行时异常:

  • 确认Postman请求头的Content-Type设置为application/json-patch+json
  • 确认请求体为标准的JsonPatch数组格式,不要直接传修改后的业务对象JSON
  • 查看服务端的异常日志,定位具体的空引用、类型不匹配等运行时错误

内容的提问来源于stack exchange,提问作者San Jaisy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:06:06