.NET Core 1.0读取表单数据发布文件并将其放在MultipartFormDataContent中

时间:2017-01-06 16:14:18

标签: c# asp.net asp.net-core .net-core

我正在尝试获取发送到.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接受的文件?

1 个答案:

答案 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);
        }
 }