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

使用HttpClient提交JSON数据时出现400 Bad Request错误,求排查

排查400 Bad Request错误的问题

嘿,我来帮你捋捋代码里的问题,导致400错误的原因主要有两个:

  • 缺少API要求的必填字段
    对比你预期提交的JSON和代码里构造的对象,你会发现代码里少了三个关键字段:DeferDate、DueDate、Reference,而且Name的值写的是"toto",和你预期的"test"也不一致。API大概率是因为收到的请求缺少这些必填参数,才返回了400错误。

  • 异步方法的错误使用方式
    HttpClient.PostAsync是异步方法,你直接用res.Result来获取结果会造成同步阻塞,这种写法不仅影响性能,还可能在某些上下文里引发死锁问题,正确的做法是用await来处理异步操作。

这里是修正后的代码示例:

// 记得把方法标记为async
private async Task SubmitDataAsync()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", mytoken);
        
        // 构造和预期一致的对象,补上缺失的字段
        var requestBody = new 
        {
            ItemData = new 
            {
                Name = "test", // 改成预期的test
                Priority = "High",
                SpecificContent = new { },
                DeferDate = "2019-01-22T11:21:09.431Z",
                DueDate = "2019-01-22T11:21:09.432Z",
                Reference = "toto"
            }
        };
        
        var content = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
        // 用await处理异步请求
        var res = await client.PostAsync(MyURL, content);
        
        try
        {
            res.EnsureSuccessStatusCode();
            MessageBox.Show("请求成功!");
        }
        catch (Exception e)
        {
            MessageBox.Show($"请求失败:{e.ToString()}");
        }
    }
}

另外,如果你不确定API的字段要求,也可以用Fiddler或者Postman先手动提交预期的JSON,确认能成功后再对应调整代码,这样能更快定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:12:10