c# - 文件 POST 返回错误 415

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

我正在尝试在我的 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”。也不干活了。

也许我问的是一些简单的问题,或者我作为一名网络开发人员应该知道的事情,但我来自后端导向的职业,我试图找出我的代码出了什么问题。因此,如果您有关于该主题的完整资源,请分享!

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

提前致谢。

最佳答案

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

因此,您有两条路:

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

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

关于c# - 文件 POST 返回错误 415,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51931221/

相关文章:

c# 到 json 无法在 View 中正确呈现

c# - 调用 Blazor 应用程序时,Postman 调用无限旋转

c# - 我怎么知道一个类会抛出什么样的异常?

c# - Liskov 替换原则、前提条件和抽象方法

c# - ASP Web API 帮助页面 - 从 XML <see> 标记链接到类

asp.net-web-api - 如何在 Swagger 中显示 WebApi OAuth token 端点

c# - 在 System.Web.Http 包中找不到 RouteAttribute

c# - Visual Studio docker 工具在调试时发布端口

asp.net-core - 是否可以将 NoSQL 用于 Identity Server 4?

c# - 如何检测 C# 类中的方法是否实现了接口(interface)中的方法?