我正在尝试在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开发人员的身份知道,但是我来自面向后端的职业,所以我试图弄清楚我的代码出了什么问题。因此,如果您有关于该主题的完整资源,请分享!
谢谢。
答案 0 :(得分:5)
根据定义IFormFile
无法使用FromBody
获得。 IFormFile
仅适用于multipart/form-data
编码的请求,而FromBody
仅适用于JSON或XML请求正文。
因此,您有两条路径:
以multipart/form-data
的形式提交文件(即传统帖子)。改用[FromForm]
(或完全忽略该属性)。
实际上以JSON格式提交文件,在这种情况下,您需要绑定到一个类以表示要发布的JSON对象。文件数据应为JSON对象中的base64编码的字符串,然后将其绑定到类型为byte[]
的属性。 ASP.NET Core将负责将base64字符串解码为字节数组。
答案 1 :(得分:1)
Content-Type应该为multipart / form-data