You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 7控制器Swagger报错:HEAD/GET请求不可带请求体

问题原因

HTTP协议规范中,GET/HEAD请求不允许携带请求体。你的控制器方法用[HttpGet]修饰,但参数BankTransactionDto bankDto默认会从请求体绑定,Swagger执行请求时会尝试给GET请求添加body,触发浏览器的Window.fetch错误,导致请求根本没到达控制器,所以断点无法命中。

解决方案

有两种常见处理方式,可根据业务场景选择:

方式一:让GET参数从查询字符串绑定(推荐,符合HTTP规范)

给参数添加[FromQuery]特性,让框架从URL查询字符串中获取参数值:

[HttpGet(Name = "GetAccountBalance")]
public async Task<ActionResult<BankTransactionDto>> GetAccountBalance([FromQuery] BankTransactionDto bankDto)
{
    var results = await _bankTransactionService.GetTotalBalance(bankDto);
    return Ok(results);
}

修改后Swagger会生成带查询参数的GET请求,不再添加请求体,错误会消失,请求能正常到达控制器触发断点。

方式二:改为POST请求(适合参数结构复杂的场景)

如果BankTransactionDto字段较多,查询字符串传递不方便,可将请求方式改为[HttpPost]:

[HttpPost(Name = "GetAccountBalance")]
public async Task<ActionResult<BankTransactionDto>> GetAccountBalance(BankTransactionDto bankDto)
{
    var results = await _bankTransactionService.GetTotalBalance(bankDto);
    return Ok(results);
}

这种方式允许请求携带body,Swagger也能正常生成请求。

内容的提问来源于stack exchange,提问作者GettingStarted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:05:22