【问题标题】:File POST returns error 415文件 POST 返回错误 415
【发布时间】:2019-01-26 14:40:35
【问题描述】:

我正在尝试在我的 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”。没有变化。
然后我尝试在线搜索其他提示,但我发现的唯一提示告诉我再次更改内容类型标题,如下所示:“接受:应用程序/json”。也不工作。

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    因此,您有两条路径:

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

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

    【讨论】:

      【解决方案2】:

      Content-Type 应该是 multipart/form-data

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        • 2017-09-07
        • 2015-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多