.Net Core 5 Post接口返回Incorrect Content-Type: application/json错误如何解决
.NET Core 5 Post请求Content-Type报错排查指南
排查步骤
- 校验Postman请求配置
- 确认请求方法为
POST,路由与控制器配置匹配 - 在Headers标签页检查
Content-Type字段值为纯application/json,不要携带额外的空格、charset=utf-8等后缀,先排除额外字符导致的格式匹配失败 - 在Body标签页确认选中
raw格式,且右侧下拉框选中JSON,同时校验提交的JSON语法完全合法,无多余逗号、引号不匹配、注释等非法内容
- 确认请求方法为
- 检查项目依赖与配置
- 确认已安装版本匹配的
Microsoft.AspNetCore.Mvc.NewtonsoftJsonNuGet包,版本需对应.NET 5的大版本号 - 检查
Startup.cs的Configure方法中间件顺序,确保app.UseRouting()在认证、授权中间件之前,路由匹配规则没有遗漏控制器入口 - 检查控制器、接口方法上是否标注了
[Consumes]特性,如果存在需要确保特性值包含application/json,避免媒体类型限制拦截合法请求 - 确认
ProjectRequest类包含public无参构造函数,属性的类型和命名与提交的JSON结构匹配,没有必填字段缺失的情况
- 确认已安装版本匹配的
- 添加调试逻辑定位根因
- 可以在
Configure方法最顶部添加请求日志中间件,打印服务端实际收到的请求头:
发起请求后查看控制台输出,如果Content-Type和Postman设置的不一致,说明存在网关、反向代理或者其他中间件修改了请求头app.Use(async (context, next) => { Console.WriteLine($"Received Content-Type: {context.Request.ContentType}"); await next.Invoke(); }); - 临时修改NewtonsoftJson配置,打印序列化报错信息:
如果控制台有序列化错误输出,说明是模型绑定阶段反序列化失败触发的报错,和Content-Type本身无关.AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); options.SerializerSettings.Error = (sender, args) => { Console.WriteLine($"序列化失败: {args.ErrorContext.Error.Message}"); args.ErrorContext.Handled = true; }; })
- 可以在
- 临时简化接口排查
把接口参数临时修改为[FromBody] JsonElement rawJson,如果请求可以正常进入方法,说明是ProjectRequest类的结构和JSON不匹配导致的模型绑定失败,只需要调整类定义或者提交的JSON结构即可修复问题
内容的提问来源于stack exchange,提问作者Chief
相关产品推荐
相关产品推荐

