我正在尝试获取发送到.NET Core API的表单数据。目的是将发布请求重定向到另一个API。
我不希望文件存储在本地,而只是在请求中再次“传输”。
这是我正在尝试的代码。
MultipartFormDataContent multipartContent = new MultipartFormDataContent();
multipartContent.Add(new StringContent(Request.Form["id"]), "id");
var file = Request.Form.Files[0];
if (file.Length > 0)
{
var fileStreamContent = new StreamContent(Request.Form.Files[0].OpenReadStream());
multipartContent.Add(fileStreamContent, Request.Form.Files[0].FileName);
client.BaseAddress = new Uri("http://example.com:8000");
client.DefaultRequestHeaders.Accept.Clear();
HttpResponseMessage response = await client.PostAsync("/document/upload", multipartContent);
if (response.IsSuccessStatusCode)
{
retValue = await response.Content.ReadAsAsync<DocumentUploadResult>();
}
}
似乎Request.Form.Files[0].OpenReadStream()
不起作用,因为远程api收到的请求为空。 openReadStream是由VS2015建议的,因为我之前使用的.FileStream似乎不再存在。
我的想法是尝试从文件创建StreamContent实际上是一个好主意吗?有没有更好的类型可以用来传输MultripartFormDataContent接受的文件?
答案 0 :(得分:1)
要从表单帖子中读取文件,请让您的操作接受IFormFile
参数:
public async Task<IActionResult> UploadFile(IFormFile file){
byte[] bytes = new byte[file.Length];
using (var reader = file.OpenReadStream())
{
await reader.ReadAsync(bytes, 0, (int)file.Length);
}
}