我有一个.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属性,因此问题似乎出在客户端实现中。
答案 0 :(得分:0)
问题似乎出在StreamContent和FileStream上。为了使其正常工作,我将其更改为:
var data = File.ReadAllBytes(fileName);
ByteArrayContent byteArrayContent = new ByteArrayContent(data);
content.Add(byteArrayContent, "imageFile", Path.GetFileName(fileName));