在 Asp.Net Core 中,如何从正文中获取多部分/表单数据?

Sco*_*tie 5 multipartform-data asp.net-core

在 Asp.Net Core 中,他们似乎已经取消了Request.Content.ReadAsMultipartAsync支持 IFormFile的功能。

这使得在您拥有实际文件的地方上传更容易,但是,我有一个用例,我需要将文件上传到浏览器内存,对其进行处理,然后将其作为正文中多格式数据的一部分发送。IFormFile 无法看到这一点,因为没有要读取的实际文件。只有当您在 Content-Disposition 上有一个文件名属性并且在客户端上有一个要上传的实际文件时,它才有效。

在我的 Asp.Net 4 应用程序中,无论是在边界之间发送还是作为附件发送,我都可以读取正文中的多部分数据。

我如何在 .Net Core 中实现这一点?

Sco*_*tie 9

我发现多部分值作为键/值对数组传递到 HttpRequest.Form 中。body 的 multipart 上的“name”值决定了键的名称。

我创建了一个辅助方法来获取文件和表单值。

public static List<FileModel> GetFileModelsFromRequest(HttpRequest request)
{
    var fileModels = new FileModels();

    foreach (var formField in request.Form)
    {
        // Form data 
        var fileModelText = formField.Value;

        ... process and add to the FileModel list
    }

    if (request.Form.Files != null && request.Form.Files.Count > 0)
    {
        foreach (var file in request.Form.Files)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                // File data
                formFile.CopyTo(ms);                    
            }

            ... process and add to the FileModel list
        }
    }

    return fileModels;
}
Run Code Online (Sandbox Code Playgroud)