使用文件发布表单数据会导致 "The input was not valid" 错误

Posting form data with file results in "The input was not valid" error

我正在使用 Postman 测试 .Net Core 2.1 Web API。我从这个开始,它奏效了——我能够将文件从 Postman 发送到我的 Web API。

Web.API

[HttpPost("uploads")]
public IActionResult FileUpload(IFormFile myfile)
{
   ...
   return Ok();
}

但是,我需要随文件一起传递一些额外的表单数据。根据我见过的其他 posts,我尝试了以下方法:

[HttpPost("uploads")]
public IActionResult FileUpload(UploadFile data)
{
    ...
    return Ok();
}

public class UploadFile {
   public IFormFile myfile {get; set;}
   public bool forceOverwrite {get; set;}
}

现在 post 来自 Postman 的结果是 "The input was not valid"。我已经进行了一些搜索,但似乎找不到任何人已经获得了类似的工作。

更新

我也尝试了以下;但是,附加值始终为假 - 即使发送为真。

public IActionResult FileUpload(IFormFile myfile, bool forceOverwrite)

更新 2

这是我在 Postman 中添加的内容,以及它在 Fiddler 中的显示方式。 (P.S。您可以忽略 POST 中的路由与我的代码中列出的路由不匹配的事实——我选择在命名方面简化 post 的事情.

要在 .NET Core Web 中绑定 FormData API,您需要添加 FromForm 属性,如下所示

    [HttpPost("uploads")]
    public IActionResult FileUpload([FromForm]UploadFile data)
    {
        return Ok();
    }

您可以尝试以下方法

 public class UploadFile
    {

        public bool forceOverwrite { get; set; }
        public IFormFile File { get; set; }

    }

并在您的控制器中

 [HttpPost]
        public async Task<IActionResult> UploadImage(UploadFile upload)
        {
            var file = upload.File; // This is the IFormFile file
            var param = upload.forceOverwrite; // param
            var filePath = Path.GetTempFileName();
            using (var stream = new FileStream(filePath, FileMode.Create))
                          await file.CopyToAsync(stream);
            return Ok(new { count = 1, path = filePath,filename=upload.forceOverwrite });
        }

这是邮递员的输出