创建Restful API时POST请求返回400错误的排查求助
以下是针对你遇到问题的具体排查方向和解决建议:
检查Content-Length是否匹配实际请求体大小
你的请求中手动设置Content-Length: 19,但实际请求体的JSON包含换行和空格,UTF-8编码下实际字节数远大于19。错误的Content-Length会导致服务器解析JSON时截断内容,直接引发400错误。
解决建议:要么去掉手动设置的Content-Length,让HTTP客户端自动计算;要么准确计算JSON的实际字节数。你可以先使用压缩后的JSON测试:{"id":12345}统一模型序列化属性
你同时使用了Newtonsoft.Json的[JsonProperty("id")]和System.Text.Json的[JsonPropertyName("id")]属性,虽然两者共存一般不会直接报错,但如果项目仅启用了其中一种序列化器,可能导致字段映射异常。
解决建议:根据项目配置保留对应属性。如果使用ASP.NET Core默认的System.Text.Json,只保留[JsonPropertyName("id")];如果配置了Newtonsoft.Json作为序列化器,则只保留[JsonProperty("id")]。排查请求体中的隐藏字符
部分情况下,JSON字符串可能包含不可见的空白字符(如全角空格、零宽字符),导致服务器无法正常解析。建议使用无格式的紧凑JSON测试,避免换行和多余空格。启用详细错误日志定位问题
默认的400响应仅返回基础错误信息,你可以在appsettings.json中开启调试日志:{ "Logging": { "LogLevel": { "Microsoft.AspNetCore": "Debug" } } }查看控制台或日志文件,会显示具体的解析错误(如JSON截断、字段不匹配等),快速定位问题根源。
内容的提问来源于stack exchange,提问作者Iain

