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

如何为目标JSON对象发送序列化JSON?遇HTTP 422错误求助

解决HTTP 422错误:正确发送符合API要求的JSON请求

问题原因

你错误组合使用了PostAsJsonAsync和手动序列化的StringContent:

  • PostAsJsonAsync的核心作用是自动将传入的对象序列化为JSON字符串,同时自动设置Content-Type: application/json请求头
  • 你先手动把对象序列化成StringContent再传入该方法,会触发双重序列化(把已有的JSON字符串再次序列化为JSON格式),最终发送的请求体完全不符合API预期,因此触发422(无法处理的实体)错误。

正确写法

写法一:PostAsJsonAsync推荐用法

无需手动序列化,直接传入匿名对象即可:

var bodyObj = new
{
    memo = "Test Memo",
    claims = new[] {
                     new { id = "1030003001131009259" , value = "30"},
                     new { id = "1030003001131009259" , value = "30"}
                 }
};

using (HttpResponseMessage response = await httpClient.PostAsJsonAsync(url, bodyObj))
{
    if (response.IsSuccessStatusCode)
    {
        // 处理成功逻辑
    }
}

写法二:手动序列化+PostAsync

如果需要手动控制序列化细节,使用PostAsync方法配合手动生成的StringContent:

var bodyObj = new
{
    memo = "Test Memo",
    claims = new[] {
                     new { id = "1030003001131009259" , value = "30"},
                     new { id = "1030003001131009259" , value = "30"}
                 }
};

// 手动将对象序列化为JSON字符串并构建请求内容
var jsonContent = new StringContent(JsonConvert.SerializeObject(bodyObj), Encoding.UTF8, "application/json");

// 使用PostAsync发送请求
using (HttpResponseMessage response = await httpClient.PostAsync(url, jsonContent))
{
    if (response.IsSuccessStatusCode)
    {
        // 处理成功逻辑
    }
}

额外检查点

你代码中claims数组的两个元素id完全相同,而API示例中使用的是不同id。如果目标API要求每个claim的id必须唯一,这也可能导致422错误,建议确认API的参数约束规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:15