文件POST返回错误415

时间:2018-08-20 12:53:57

标签: c# asp.net-web-api asp.net-core controller upload

我正在尝试在ASP.NET Core 2项目中实现文件上传功能。
将POST呼叫发送到我的WEBApi服务时,我收到以下响应:

  

状态码:415;不支持的媒体类型

我的控制器动作如下:

    [HttpPost]
    [Route("Upload")]
    [Authorize]
    public Guid Post([FromBody]IFormFile file)
    {
        Stream readStream = file.OpenReadStream();

        byte[] fileData = new byte[file.Length];

        readStream.Read(fileData, 0, fileData.Length);

        return _printServiceManager.SaveFile(fileData);
    }

我从Angular 6客户端应用程序和Postman中调用它,但没有任何变化。我在这里找到了有关此主题的现有问题,但是给出的解决方案是将标头更改为“ Content-Type:application / json”。没有变化。
然后我尝试在线搜索其他提示,但是我发现的唯一提示告诉我再次更改内容类型标头,如下所示:“ Accept:application / json”。也不行。

也许我问的是一个简单的问题,或者我应该以Web开发人员的身份知道,但是我来自面向后端的职业,所以我试图弄清楚我的代码出了什么问题。因此,如果您有关于该主题的完整资源,请分享!

试图再次根据建议更改内容类型,但我得到了相同的结果:
enter image description here

谢谢。

2 个答案:

答案 0 :(得分:5)

根据定义IFormFile无法使用FromBody获得。 IFormFile仅适用于multipart/form-data编码的请求,而FromBody仅适用于JSON或XML请求正文。

因此,您有两条路径:

  1. multipart/form-data的形式提交文件(即传统帖子)。改用[FromForm](或完全忽略该属性)。

  2. 实际上以JSON格式提交文件,在这种情况下,您需要绑定到一个类以表示要发布的JSON对象。文件数据应为JSON对象中的base64编码的字符串,然后将其绑定到类型为byte[]的属性。 ASP.NET Core将负责将base64字符串解码为字节数组。

答案 1 :(得分:1)

Content-Type应该为multipart / form-data