使用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
相关产品推荐
相关产品推荐

