如何修改ASP.NET Core GET接口支持Postman参数传递解决415错误
问题原因分析
- 你之前发送带JSON请求体的GET请求时,请求头默认携带了
Content-Type: application/json,ASP.NET Core会默认尝试从请求体解析参数,现在切换为查询参数传参后,如果请求还是携带了该请求头且请求体为空,框架无法匹配媒体类型,就会返回415 Unsupported Media Type错误。 - 控制器方法的模型参数没有显式指定绑定源,框架无法优先从查询字符串读取参数。
解决方案
步骤1:修改控制器方法,显式指定参数绑定来源
给RentReason model参数添加[FromQuery]特性,告诉ASP.NET Core从查询字符串中读取参数绑定到模型:
[HttpGet] public async Task<IActionResult> getRentReason([FromQuery] RentReason model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } try { var list = await _request.getRentReason(model); return Ok(list); } catch (Exception ex) { return BadRequest(ex.Message); } return Ok(); }
你的业务层方法、接口定义都不需要修改,直接复用原有逻辑即可。
步骤2:调整Postman请求配置
- 清空GET请求的Body内容
- 不要手动添加
Content-Type: application/json请求头,GET请求不需要该头 - 直接在Params栏填写参数key为
rentreasonId,value为40,或者直接在地址栏拼接?rentreasonId=40即可正常请求。
可选优化:简化参数
如果该接口只需要rentreasonId一个筛选参数,可以直接不用模型传参,简化代码如下:
[HttpGet] public async Task<IActionResult> getRentReason([FromQuery] string rentreasonId) { if (!ModelState.IsValid) { return BadRequest(ModelState); } try { var list = await _request.getRentReason(new RentReason { rentreasonId = rentreasonId }); return Ok(list); } catch (Exception ex) { return BadRequest(ex.Message); } return Ok(); }
内容的提问来源于stack exchange,提问作者ajd871
相关产品推荐
相关产品推荐

