我正在尝试在我的 ASP.NET Core 2 项目中创建文件上传功能。
当向我的 WEBApi 服务发送 POST 调用时,我收到此响应:
Status Code: 415; Unsupported Media Type
我的 Controller 操作如下所示:
[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 中调用它,但没有任何变化。我在这里发现了一个关于此主题的现有问题,但给出的解决方案是将我的 header 更改为“Content-Type:application/json”。没有变化。
然后我尝试在线搜索其他提示,但我发现的唯一提示告诉我再次更改内容类型 header ,如下所示:“Accept:application/json”。也不干活了。
也许我问的是一些简单的问题,或者我作为一名网络开发人员应该知道的事情,但我来自后端导向的职业,我试图找出我的代码出了什么问题。因此,如果您有关于该主题的完整资源,请分享!
提前致谢。
最佳答案
根据定义,无法使用 FromBody
获取 IFormFile
。 IFormFile
仅适用于 multipart/form-data
编码请求,而 FromBody
仅适用于 JSON 或 XML 请求正文。
因此,您有两条路:
以
multipart/form-data
形式提交文件(即传统帖子)。请改用[FromForm]
(或者干脆忽略该属性)。实际上以 JSON 形式提交文件,在这种情况下,您需要绑定(bind)到一个类来表示您要发布的 JSON 对象。文件数据应该是 JSON 对象中的 base64 编码字符串,然后您将其绑定(bind)到
byte[]
类型的属性。 ASP.NET Core 将负责将 Base64 字符串解码为字节数组。
关于c# - 文件 POST 返回错误 415,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51931221/