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

问题描述 投票:0回答:3

我使用 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();
    }

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

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

public class FileUploadRequest
{
    public string UploaderName { get; set; }
    public string UploaderAddress { get; set; }
    public IFormFile File { get; set; }
}

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

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

rest asp.net-core swagger asp.net-core-webapi
3个回答
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)
{

}

结果:


2
投票

您可以在[HttpPost]中再次使用IFormFile,这样您就可以看到该按钮。

    public class FileUploadRequest
        {
            public string? UploaderName { get; set; }
            public string? UploaderAddress { get; set; }
            public IFormFile? File { get; set; }
        }

        [HttpPost]
        public IActionResult PostFile(IFormFile file, FileUploadRequest model)
        {
           
                var saveFilePath = Path.Combine("c:\\savefilepath\\", model.UploaderAddress!);
                using (var stream = new FileStream(saveFilePath, FileMode.Create))
                {
                  file.CopyToAsync(stream);
                }
                return Ok();
            }

0
投票

当我只获得控制器的 1 个 IFormfile 字段时该怎么办,它不显示按钮,但是当我添加任何字段时它会出现

public async Task<IActionResult> ImportData([FromForm] IFormFile file = default!)
        => Ok(await _productService.InsertDataFromFile(file));

没有按钮。但如果我在这个 IFormFile 附近添加 int 数字,它就会出现

抱歉英语不好

© www.soinside.com 2019 - 2024. All rights reserved.