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

如何使用Swagger测试包含IFormFile与模型的WebAPI接口

问题原因与解决方案

你的问题核心是请求格式不兼容:你用了[FromBody]标记参数,这会让框架期望请求体是JSON/XML格式,但文件上传必须使用multipart/form-data格式,两者冲突导致Swagger无法识别文件上传字段,自然不会显示选择按钮。

正确的接口写法

写法1:模型包含IFormFile,使用[FromForm]标记

// 接口方法
public async Task<ActionResult<Document>> AddOne([FromForm] DocumentAddRequest docAddRequest) 
{
    // 业务逻辑:可通过docAddRequest.Name获取文本参数,docAddRequest.File获取文件
    return Ok();
}

// 请求模型
public class DocumentAddRequest
{
    public string Name { get; set; }
    public IFormFile File { get; set; }
}

写法2:分开模型与IFormFile参数,均用[FromForm]标记

public async Task<ActionResult<Document>> AddOne([FromForm] DocumentAddRequest docAddRequest, [FromForm] IFormFile file) 
{
    // 业务逻辑:docAddRequest.Name获取文本参数,file获取上传文件
    return Ok();
}

public class DocumentAddRequest
{
    public string Name { get; set; }
}

测试方法

1. Swagger测试

修改接口写法后,刷新Swagger页面,会自动生成multipart/form-data类型的请求体UI:

  • 文本字段Name显示输入框,直接填写值
  • 文件字段File显示文件选择按钮,选择本地文件后点击「Execute」即可发送请求

2. Postman测试

  • 新建POST请求,填入接口URL
  • 切换到「Body」标签,选择form-data格式
  • 添加两个键值对:
    • 键名Name,类型选「Text」,输入对应文本值
    • 键名File(对应写法1的模型属性名,或写法2的参数名),类型选「File」,选择本地文件
  • 点击「Send」发送请求

3. curl命令测试

# 对应写法1的命令
curl -X POST "http://your-api-domain/your-controller/addone" -F "Name=测试文档" -F "File=@/本地文件路径/xxx.pdf"

# 对应写法2的命令
curl -X POST "http://your-api-domain/your-controller/addone" -F "Name=测试文档" -F "file=@/本地文件路径/xxx.pdf"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:07