使用 IFormFile 上传表单数据为空

Form Data Upload with IFormFile is Null

我有一个 .Net Core 2.2 web api 接收带有对象上的 IFormFile 属性 的表单上传。

public class UploadFile
{
  [FromForm(Name = "id")]
  public int id { get; set; }
  [FromForm(Name = "imageFile")]
  public IFormFile imageFile { get; set; }
}
[HttpPost]
public async Task<IActionResult> UploadMedia([FromForm] UploadFile uploadFile)
{
  ...
}

我有一个使用 .Net 4.5+ 的客户端调用网络 api 上传:

using (var client = new HttpClient())
{
  using (var content = new MultipartFormDataContent())
  {
    content.Headers.ContentType.MediaType = "multipart/form-data";
    content.Add(new StringContent(id.ToString()), "id");
    using (var filestream = new FileStream(info.file_location, FileMode.Open))
    {
      content.Add(new StreamContent(filestream), "imageFile");
      using (var message = await client.PostAsync("http://localhost:5000/api/uploads", content))
      {
        var result = await message.Content.ReadAsStringAsync();
      }
    }
  }
}

我可以看到对网络的调用 api,但图像文件 属性 始终为空。 id 属性 是正确的。如果我使用 Postman 测试网络 api,图像文件 属性 被正确传递,所以问题似乎出在客户端实现中。

问题似乎出在 StreamContent 和 FileStream 上。为了让它起作用,我将其更改为:

var data = File.ReadAllBytes(fileName);
ByteArrayContent byteArrayContent = new ByteArrayContent(data);
content.Add(byteArrayContent, "imageFile", Path.GetFileName(fileName));