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 页面中的自定义路由
如何使用 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 已启用