ASP.NET Core 2.2添加分页后ApiController返回415不支持媒体类型求助
解决ASP.NET Core 2.2中[ApiController]导致的415 Unsupported Media Type错误(分页场景)
这个问题的核心在于**[ApiController]属性自动启用的参数绑定源推断特性**。在ASP.NET Core中,当你标记了[ApiController]后,框架会对复杂类型参数(比如你的ResourceParameters)默认采用**请求体(FromBody)**绑定,而不是传统的查询字符串绑定。
而你的分页参数(比如页码、页大小这类)肯定是通过URL查询字符串传递的对吧?这时候服务器期望从请求体获取数据,但你的GET请求本来就不会携带请求体(或者Content-Type不符合要求),所以就抛出了415不支持的媒体类型错误。
最优解决方案
只需要在Get方法的resourceParameters参数上加上[FromQuery]特性,明确告诉框架从查询字符串中绑定这个复杂类型的参数:
public async Task<ActionResult<BlogPost>> Get([FromQuery] ResourceParameters resourceParameters) { return Ok(await _repository.GetBlogPostsAsync(resourceParameters)); }
为什么注释[ApiController]能解决问题?
当你注释掉[ApiController]后,框架会回到传统的参数绑定逻辑——复杂类型会自动尝试从查询字符串绑定,所以错误就消失了,但这样会丢失[ApiController]带来的其他便利(比如自动模型验证、强制属性路由、简化响应格式等),显然不是最优选择。
你也可以检查下自己的请求:GET请求确实不应该携带请求体,给分页参数加上[FromQuery]是最贴合REST规范的做法。
内容的提问来源于stack exchange,提问作者Tig2810
相关产品推荐
相关产品推荐

