Postman传RAW JSON到multipart/form-data接口返回400问题咨询
错误根本原因
返回400 Bad Request的核心原因是请求编码格式和后端绑定要求不匹配:
- 后端接口标记了
[FromForm]特性,要求请求必须使用multipart/form-data(适配文件上传场景)或application/x-www-form-urlencoded编码,模型绑定器才能正确解析参数 - Postman中使用RAW JSON传参时,会自动将请求头
Content-Type设置为application/json,模型绑定器无法从JSON请求体中解析Form格式的参数,直接触发绑定失败返回400。
可行解决方法
根据是否需要保留文件上传能力,二选一即可:
方案1:保留[FromForm]特性(适配文件上传需求,推荐)
不需要修改后端代码,仅调整Postman配置即可实现公共参数一次修改全局生效:
- 基础用法:把所有公共非文件参数直接定义为集合变量,比如业务参数
title对应变量{{create_title}}、bizType对应{{create_bizType}}。3个调用该接口的请求都选择form-data格式,公共参数直接引用对应集合变量,文件上传字段在各请求内单独配置即可。后续参数变更只需要修改集合变量值,所有引用的请求会自动同步。 - 进阶批量用法(不想逐个定义表单变量时用):
- 把所有公共参数按JSON格式存在集合变量
common_form_data中,示例值:
{ "title": "测试单据", "bizType": 3, "remark": "公共测试参数" }- 在集合层级的Pre-request Script中添加以下脚本,请求发送前会自动把JSON解析为表单参数追加到请求体:
const commonParams = JSON.parse(pm.collectionVariables.get("common_form_data")); Object.entries(commonParams).forEach(([key, val]) => { pm.request.body.formdata.add({ key: key, value: String(val) }) })- 每个接口请求仅需要单独配置文件上传字段,不需要重复填写公共表单参数,后续修改公共参数仅需调整
common_form_data变量值即可。
- 把所有公共参数按JSON格式存在集合变量
方案2:调整后端绑定配置(无文件上传场景可选)
如果该接口后续不需要处理文件上传,直接移除接口参数上的[FromForm]特性即可,.NET 6 Web API会默认使用application/json格式解析请求体,此时原有RAW JSON存储为集合变量的写法可以正常工作,不会返回400错误。
注意:只要接口需要接收上传文件,就不能使用这个方案,文件数据无法通过纯JSON格式传输。
内容的提问来源于stack exchange,提问作者John Sari
相关产品推荐
相关产品推荐

