asp.net core 2.2 发布文件导致 http/415 不支持的媒体类型

Posted

技术标签:

【中文标题】asp.net core 2.2 发布文件导致 http/415 不支持的媒体类型【英文标题】:asp.net core 2.2 posting file results in http/415 unsopported mediatype 【发布时间】:2019-10-23 16:42:51 【问题描述】:

来自邮递员,我正在尝试将文件发布到 asp.net core 2.2 api-controller。

POST /api/epd/noshow/uploadfile HTTP/1.1
Host: localhost:44361
User-Agent: PostmanRuntime/7.11.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 3d633228-2554-442b-84f4-4e8214972886,a8f994f4-973e-411f-b96b-778af2c082b4
Host: localhost:44361
accept-encoding: gzip, deflate
content-type: multipart/form-data; boundary=--------------------------201375848683546790642901
content-length: 237
Connection: keep-alive
cache-control: no-cache
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW


Content-Disposition: form-data; name="file"; filename="C:\temp\caldr.json


------WebKitFormBoundary7MA4YWxkTrZu0gW--

api-controller 方法

[HttpPost]
[AllowAnonymous]
public IActionResult UploadFile([FromForm]IFormFile file)

    return Ok();

我已经尝试过FromForm、FromBody,什么都没有。在 postman 中设置 content-type,在 postman 中不设置 content-type 总是返回相同的错误。

有什么建议吗?

【问题讨论】:

为什么设置content-type 的标头指定boundary--------------------------201375848683546790642901 而设置Content-Type 的另一个标头指出边界是----WebKitFormBoundary7MA4YWxkTrZu0gW 【参考方案1】:

这比预期的要简单 :) 您以表单数据的形式发送请求正文。此处,此示例仅显示了使用 ASp.NET Core 2.2 - WebAapi 的简单文件发布调用

邮递员:

API:

【讨论】:

这正是我在邮递员中所做的。但仍然无法正常工作。我应该在管道中添加一些配置? 请查看代码更改,您必须从请求方法@BrilBroeder 中删除[FromForm] 删除 FromForm 仍然没有成功。它甚至没有命中控制器的构造函数。我想可能是路由问题。所以我改为 GET,移除了身体,它确实击中了控制器/动作。改回 POST,添加了文件,它执行了操作,但其中没有文件。我注意到我忘了在邮递员中设置“钥匙”。设置密钥,它再次没有命中控制器构造函数:-( @BrilBroeder,听起来像XYproblem :-) 不,不是。我只想上传一个文件,然后从那里处理该文件。【参考方案2】:

找到问题和解决方案。仅供参考,如果其他人遇到同样令人难以置信的问题。

在控制器的'grandmother'类上,有如下属性:

[Consumes("application/json")]

当然不接受表单数据:-)

通过将以下属性添加到操作来覆盖此默认行为

[Consumes("multipart/form-data")]

【讨论】:

以上是关于asp.net core 2.2 发布文件导致 http/415 不支持的媒体类型的主要内容,如果未能解决你的问题,请参考以下文章

IIS 部署不能包含 asp.net core 2.2 razor 页面中 wwwroot 文件夹的文件

ASP.NET Core 2.2 Razor 页面中的自定义路由

升级到 asp.net core 2.2 后的空 href

如何使用 Visual Studio 2019 在 ASP.NET Core 2.2 中安装 Font Awesome [关闭]

获取 ASP.NET-Core 2.2 控制器中的控制器名称和方法名称

本地 Javascript Fetch Post 请求失败,调用 ASP.NET Core 2.2 Web API。 CORS 已启用