使用 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));
我有一个 .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));