Asp.net core 将文件上载到ASP.Net 5 Web API时,文件集合为空

Asp.net core 将文件上载到ASP.Net 5 Web API时,文件集合为空,asp.net-core,Asp.net Core,我正在尝试将一些文件从控制台应用程序上载到ASP.NET 5 WEB API服务 客户端控制台应用程序: private static HttpResponseMessage UploadFiles(string[] files, Uri uploadEndpoint) { var message = new HttpRequestMessage(); var content = new MultipartFormDataContent();

我正在尝试将一些文件从控制台应用程序上载到ASP.NET 5 WEB API服务

客户端控制台应用程序:

    private static HttpResponseMessage UploadFiles(string[] files, Uri uploadEndpoint)
    {
        var message = new HttpRequestMessage();
        var content = new MultipartFormDataContent();

        foreach (var file in files)
        {
            var fs = new FileStream(file, FileMode.Open);
            var index = file.LastIndexOf(@"\");
            var fn = file.Substring(index + 1);
            fs.Position = 0;
            content.Add(new StreamContent(fs), "file", fn);
        }

        message.Method = HttpMethod.Post;
        message.Content = content;
        message.RequestUri = uploadEndpoint;

        var client = new HttpClient();
        return client.SendAsync(message).Result;
    }
服务器Asp.NET5WebAPI

    [HttpPost("upload")]
    public IActionResult UploadFiles(ICollection<IFormFile> files)
    {
        var streams = files.Select(f => f.OpenReadStream()).ToArray();
        var names = files.Select(f => ContentDispositionHeaderValue.Parse(f.ContentDisposition).FileName).ToArray();

        ProcessFiles(streams, names);

        return new HttpOkResult();
    }    
不幸的是,IFormFile的集合总是空的。 谁能告诉我为什么

谢谢


Manu

您需要将表单的enctype设置为multipart/form data。像这样的

<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data">
    <input type="file" name="files" multiple/>
    <input type="submit" value="Upload" />
</form>

上载控制器希望发布数据的名称标识符是文件,而不是文件

此行:content.Addnew StreamContentfs,file,fn

应该是:content.Addnew StreamContentfs,files,fn


所以你的代码基本上可以运行,这只是一个简单的错误

我遇到了同样的问题,结果发现我只是缺少了HTML中的-name=文件。

如何使用C HttpRequestMessage实现这一点?我在网上看到的所有代码示例都与我提供的非常相似。上载带有MultipartFormDataContent和HttpRequestMessage对象的flies时,我找不到enctype的引用。如果它解决了您的问题,请接受回答。否则,您最好详细说明为什么它对您不起作用,或者提供对您起作用的答案,并接受它。@Manu Cohen Yashar您找到这个问题的解决方案了吗。我也有同样的问题