使用Postman二进制方法上传文件到asp.net MVC控制器无法接收文件?

时间:2018-01-18 13:19:08

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

在Postman工具中,使用Form-data方法将文件上传到asp.net MVC控制器可以正常接收文件,但是使用二进制方法上传文件控制器Action方法Request.Files无法接收文件,不好意思错误在哪里?

例如,控制器操作:

public class UploadFilesController : Controller
{
    // GET: UploadFiles
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Test()
    {
        if (Request.Files.Count > 0)
        {
            var file = Request.Files[0];

            return Json("OK! Received file");
        }
        else
        {
            return Json("No file Received");
        }


    }
}

以下是Postman二进制方法上传文件图标:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

我不认为可以从邮递员那里将图像/文件作为binary发送,并且可以在控制器操作中将其显示在Request.Files中。

如果您打开邮递员控制台( Alt + Ctrl + C 或View - > Show Postman Console),您可以看到请求数据以及响应。

使用表单数据以正常方式发送文件,您可以看到请求正文中包含大量有关该文件的信息:

postman form data post request

使用二进制方法发送文件时,请求正文未定义:

postman binary post request

因此,当控制器收到请求时,它不知道如何解释这个未定义的数据。我并不是说从原始输入流中提取文件是不可能,但是在表单数据中发布了大量数据,发布在二进制文件中,这有助于控制器理解请求。

答案 1 :(得分:0)

由于您尚未明确设置Content-Type,因此Postman设置了默认的Content-Type。对于正文的表单数据类型,邮递员将Content-Type设置为multipart / form-data。并且它没有为二进制方法设置Content-Type。但是,在二进制类型中,附加的文件本质上必须是二进制的,即人类不可读。您的文件似乎是人类可读的文件,因此未按预期处理您的请求。

在不同情况下,您可以参考下面的链接获取默认的Content-Type。

text/plain is the default value for textual files. A textual file should be human-readable and must not contain binary data. application/octet-stream is the default value for all other cases.

使用邮递员发送请求-click here