我已将我的项目升级到 MVC Core 2.2,突然所有从查询或表单数据接收参数的 WEB Api 端点开始返回 415 Unsupported Media Type。
这是我的 web apis 中的示例方法
[HttpPut()]
public int Add(Entities.UserMember user)
{
Service.UserCreate(user);
return user.Id;
}
这在 MVC Core 2.1 接受来自 url 和 form 的情况下工作得非常好。现在看来我需要为每个端点指定一个特定的属性,而且似乎只能使用一个。有没有办法允许相同的行为,或者我需要更改我的代码并将 FromQuery() 添加到我的所有 api 方法中?
对于这个问题,它是由[ApiController]
功能引起的。
在 ASP.NET Core 2.1 中,列表和数组等集合类型参数被错误地推断为 [FromQuery]。如果要从请求正文中绑定这些参数,则应将 [FromBody] 属性用于这些参数。此行为已在 ASP.NET Core 2.2 或更高版本中得到纠正,其中默认情况下推断集合类型参数是从主体绑定的。
参考:绑定源参数推断
有两种选择。
[ApiController]
从控制器中删除SuppressInferBindingSourcesForParameters
由 true设置
services.Configure<ApiBehaviorOptions>(options => {
options.SuppressInferBindingSourcesForParameters = true;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句