使用文件过帐表单数据会导致“输入无效”错误

问题描述 投票:4回答:2

我正在使用Postman来测试.Net Core 2.1 Web API。我从这开始,它工作 - 我能够从Postman发送文件到我的Web API。

Web.API

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

但是,我需要传递一些额外的表单数据和文件。基于我见过的其他帖子,我尝试了以下内容:

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

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

现在从邮递员发帖导致“输入无效”。我已经做了一些搜索,似乎找不到任何已经得到类似工作的人。

更新

我也试过以下几点;但是,附加值总是假的 - 即使发送为真。

public IActionResult FileUpload(IFormFile myfile, bool forceOverwrite)

更新2

enter image description here

enter image description here

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

asp.net-core-webapi asp.net-core-2.1
2个回答
11
投票

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

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

0
投票

您可以尝试以下方法

 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 });
        }

这是邮递员的输出

enter image description here

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