Swashbuckle/Swagger:如何用OperationFilter移除Get接口错误Body参数
解决Swagger为GET接口错误生成Body参数的问题
你的问题核心在于:错误生成的Body参数并不在operation.Parameters集合里,而是存储在operation.RequestBody属性中,所以之前的过滤器根本找不到要移除的目标。另外,接口上标注的[SwaggerConsumes("application/json")]是触发这个问题的诱因——GET请求通常不需要指定Consumes,这个属性会让Swagger误以为该接口接收请求体,从而生成多余的body参数。
正确的OperationFilter实现
修改过滤器,直接针对RequestBody处理,并且只对GET请求生效,避免影响POST/PUT等正常需要请求体的接口:
public class RemoveGetRequestBodyFilter : IOpenApiOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { // 判断当前接口是否为GET请求 var isGetMethod = context.ApiDescription.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase); if (isGetMethod && operation.RequestBody != null) { // 移除GET请求的RequestBody operation.RequestBody = null; } } }
注册过滤器
确保在Swagger配置中添加这个过滤器(通常在Program.cs里):
builder.Services.AddSwaggerGen(c => { // 其他Swagger配置项... c.OperationFilter<RemoveGetRequestBodyFilter>(); });
额外建议
如果业务上不需要,可以直接去掉接口上的[SwaggerConsumes("application/json")]属性,从根源上避免Swagger生成多余的body参数。
内容的提问来源于stack exchange,提问作者hewsim
相关产品推荐
相关产品推荐

