使用IFormFile上传的表单数据为空

时间:2019-09-09 19:11:50

标签: .net .net-4.5

我有一个.Net Core 2.2 Web API,该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();
      }
    }
  }
}

我可以看到对Web api的调用,但是imageFile属性始终为null。 id属性正确。如果我使用Postman测试Web api,则会正确传递imageFile属性,因此问题似乎出在客户端实现中。

1 个答案:

答案 0 :(得分:0)

问题似乎出在StreamContent和FileStream上。为了使其正常工作,我将其更改为:

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