如何在 IFormFile 中与其他属性结合使用 swagger 获取上传按钮?

Bug*_*der 20 rest swagger asp.net-core asp.net-core-webapi

我使用 Swagger 创建了一个 Asp.net core 3.1 Web api 将文件上传到服务器。下面的代码工作正常:

    [HttpPost("PostFile")]
    public ActionResult PostFile(IFormFile uploadedFile)
    {            
        var saveFilePath = Path.Combine("c:\\savefilepath\\", uploadedFile.FileName);
        using (var stream = new FileStream(saveFilePath, FileMode.Create))
        {
            uploadedFile.CopyToAsync(stream);
        }
        return Ok();
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到了一个漂亮的上传按钮。

在此输入图像描述

但是,现在我想使用不同的模型。它与 IFormFile 一起具有更多属性。

public class FileUploadRequest
{
    public string UploaderName { get; set; }
    public string UploaderAddress { get; set; }
    public IFormFile File { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此模型时,我在 Swagger 中没有看到任何可以帮助我在请求中附加文件的上传按钮。

在此输入图像描述

由于某种原因,它将 IFormFile 显示为字符串。我怎样才能在这里获得上传按钮?

Ren*_*ena 33

在 ASP.NET Core Web API 中,它application/json默认绑定格式数据。但您的模型需要的是multipart/form-data类型数据。所以你需要[FromForm]属性来指定具体的来源。

我在 ASP.NET Core 3.1 中使用Swashbuckle.AspNetCore版本5.6.3

[HttpPost]
public ActionResult PostFile([FromForm]FileUploadRequest model)
{

}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述