You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core POST请求如何同时接收[FromBody]类对象与IFormFile参数

你当前的接口配置无法同时接收JSON对象和文件,原因有两个:

  1. 接口标注了[Consumes("application/json")],仅支持JSON格式的请求体,而文件上传必须使用multipart/form-data格式的请求体,二者互斥
  2. [FromBody]特性会绑定整个请求体的内容到CNCTask对象,没有多余空间容纳文件内容

方案1:使用DTO封装所有请求参数(推荐)

步骤1:创建统一请求DTO

// 新增请求传输类
public class CNCTaskUploadRequest
{
    public CNCTask TaskInfo { get; set; }
    public IFormFile UploadFile { get; set; }
}

步骤2:修改控制器接口配置

[HttpPost("TaskUpload")]
// 把接收格式改为multipart/form-data
[Consumes("multipart/form-data")]
// 用[FromForm]绑定整个form-data内容到DTO
public async Task<ActionResult<CNCTask>> Post([FromForm] CNCTaskUploadRequest request)
{
    // 业务逻辑:request.TaskInfo 就是CNCTask对象,request.UploadFile 就是上传的文件
}

方案2:直接拆分为两个Form参数

如果你不想新增DTO,也可以直接修改接口参数的绑定特性:

[HttpPost("TaskUpload")]
[Consumes("multipart/form-data")]
public async Task<ActionResult<CNCTask>> Post([FromForm] CNCTask task, [FromForm] IFormFile file)
{
    // 直接取task和file参数即可
}

Postman测试步骤

  1. 新建POST请求,填入你的接口地址
  2. 切换到Body标签,选择form-data格式
  3. 按层级填写CNCTask的字段:
    • 用方案2的话:键填description,值填truc;键填completion,值填24;键填machine.hostname,值填some host;键填machine.port,值填1234
    • 用方案1的话:键统一加前缀TaskInfo.,比如TaskInfo.description、TaskInfo.machine.hostname即可
  4. 新增文件字段:键填file(方案1填UploadFile),鼠标移到key输入框右侧的类型下拉框,选择File,然后点击Select Files选择本地要上传的文件
  5. 点击Send即可发起请求,后端可以正常拿到所有参数

内容的提问来源于stack exchange,提问作者JetsON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:24:00