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

向.NET 6 Web API发送JSON时出现400(Bad Request)错误求助

错误原因及解决办法

核心错误原因

  • 重复序列化JSON:在button2_Click中已经将数据源序列化为JSON字符串table,但ApiSender.POSTData方法里又对这个字符串执行了一次JsonConvert.SerializeObject(json),导致最终发送的是被转义的字符串(比如原本的数组变成带双引号包裹的"[{...}]"),Web API无法将这种格式解析为LabData对象或数组。
  • 接口参数不匹配:如果Web API的POST接口接收的是单个LabData对象,但你实际发送的是List<LabData>数组,也会触发类型转换失败的400错误。

分步解决办法

1. 修复重复序列化问题

修改代码,避免两次序列化JSON:

  • 调整button2_Click方法,直接传递数据源对象(无需提前序列化):
private void button2_Click(object sender, EventArgs e)
{
    var url = "https://localhost:7248/api/Lab";
    var labDataList = LabResult.GetLabData();
    dataGridView1.DataSource = labDataList;     
    ApiSender apiSender = new ApiSender();
    apiSender.POSTData(labDataList, url);
}
  • 修改ApiSender.POSTData方法,仅对数据源对象序列化一次:
public bool POSTData(object data, string url)
{
    using (var content = new StringContent(JsonConvert.SerializeObject(data), System.Text.Encoding.UTF8, "application/json"))
    {
        HttpResponseMessage result = _httpClient.PostAsync(url, content).Result;
        if (result.StatusCode == System.Net.HttpStatusCode.Created)
            return true;
        string returnValue = result.Content.ReadAsStringAsync().Result;
        throw new Exception($"Failed to POST data: ({result.StatusCode}): {returnValue}");
    }
}

2. 确保Web API接口参数匹配

检查Web API的POST接口,保证参数类型与发送的数据一致:

  • 若发送的是List<LabData>数组,接口需定义为接收集合类型:
[HttpPost]
public IActionResult Post([FromBody] List<LabData> labDataList)
{
    // 业务处理逻辑
    return CreatedAtAction(nameof(Get), new { id = ... }, labDataList);
}
  • 若接口原本仅支持单个LabData,要么修改接口支持批量接收,要么循环发送单个对象。

3. 验证最终发送的JSON格式

修复后,发送的JSON需为你提供的原始数组格式:

[{"SerialNumber":1,"LabParameterName":"abc","LabValue":7.80,"LabDate":"2001-11-16T10:10:00"},{"SerialNumber":2,"LabParameterName":"xyz","LabValue":10.00,"LabDate":"2001-11-16T10:10:00"},{"SerialNumber":3,"LabParameterName":"qq","LabValue":5.00,"LabDate":"2001-03-16T10:10:00"},{"SerialNumber":18,"LabParameterName":"cbc","LabValue":200.0,"LabDate":"2001-11-16T10:10:00"}]

可通过抓包工具确认格式是否正确,确保没有被额外转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:30:42