我使用 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 显示为字符串。我怎样才能在这里获得上传按钮?
您可以在[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();
}
当我只获得控制器的 1 个 IFormfile 字段时该怎么办,它不显示按钮,但是当我添加任何字段时它会出现
public async Task<IActionResult> ImportData([FromForm] IFormFile file = default!)
=> Ok(await _productService.InsertDataFromFile(file));
没有按钮。但如果我在这个 IFormFile 附近添加 int 数字,它就会出现
抱歉英语不好