.NET Web API POST请求出现415不支持媒体类型错误排查求助
排查.NET与Flask交互时的415 Unsupported Media Type错误
常见原因及解决方法
1. .NET控制器参数绑定或格式化配置问题
- 确保控制器标记了
[ApiController]特性,该特性会自动启用JSON输入格式化,简化参数绑定逻辑。 - 确认POST方法的参数使用
[FromBody]特性,明确告诉.NET从请求体中解析JSON数据:[HttpPost] public IActionResult AddCategory([FromBody] CategoryRequestModel model) { // 业务逻辑实现 } - 若使用Newtonsoft.Json替代默认的System.Text.Json,需在Startup/Program.cs中正确注册服务:
builder.Services.AddControllers().AddNewtonsoftJson();
2. Flask请求的Content-Type与数据格式不匹配
- Flask发送请求时,必须使用
json=data参数传递数据,而非data=data。前者会自动设置Content-Type: application/json并将数据序列化为标准JSON格式:import requests payload = { "Title": "Sample Category", "Type": "Default", "Icon": "sample-icon.svg" } res = requests.post("http://your-api-endpoint/api/categories", json=payload) - 若直接使用
data=payload,Flask会发送application/x-www-form-urlencoded格式,.NET默认无法将该格式解析到[FromBody]绑定的模型,直接触发415错误。
3. 模型字段类型或命名不匹配
- 检查.NET的请求模型(如
CategoryRequestModel)与Flask发送的JSON键是否匹配:- .NET默认的System.Text.Json对大小写不敏感,但如果手动开启了大小写敏感配置,会导致字段匹配失败。
- 若
Icon字段是文件类型(如.NET中的IFormFile),则不能用JSON传输,需切换到multipart/form-data格式:- .NET端修改参数为
[FromForm]:[HttpPost] public IActionResult AddCategory([FromForm] CategoryWithFileModel model) { // model.Icon为IFormFile类型,可直接处理上传的文件 } - Flask端用
files参数上传文件:files = {"Icon": open("icon.png", "rb")} data = {"Title": "Sample", "Type": "Default"} res = requests.post("http://your-api-endpoint/api/categories", data=data, files=files)
- .NET端修改参数为
4. Postman测试的细节问题
- 即使手动设置了Content-Type,也要确保请求体是合法的JSON格式(无语法错误,如逗号遗漏、引号不匹配)。
- 若测试文件上传,需切换到
form-data标签页,分别添加文本字段和文件字段,而非使用raw的JSON格式。
内容的提问来源于stack exchange,提问作者Rasheeda Rahimi
相关产品推荐
相关产品推荐

