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

如何从Swagger中排除BaseController的DuplicateAsync动作?

解决Swagger重复解析基类控制器动作的问题

方法一:直接添加忽略特性

给DuplicateAsync方法加上[ApiExplorerSettings(IgnoreApi = true)]特性,这会告诉Swagger依赖的ApiExplorer组件直接忽略该接口,不将其纳入文档生成范围。

修改后的代码示例:

[HttpGet("Duplicate/{dup}")]
[ApiExplorerSettings(IgnoreApi = true)]
public async Task<IActionResult> DuplicateAsync(string dup)
{
    if (DuplicateIdRegEx().IsMatch(dup))
    {
        if (int.TryParse(dup.AsSpan(1), out int id))
            return await EditAsync(id, true);
    }

    return NotFound();
}

方法二:自定义Swagger文档过滤器

如果不想修改基类代码,可以通过自定义过滤器过滤掉目标动作:

  1. 创建过滤器类,实现IDocumentFilter接口:
public class IgnoreBaseControllerDuplicateActionFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        var baseControllerType = typeof(BaseController);
        var pathsToRemove = new List<string>();

        foreach (var (pathKey, pathItem) in swaggerDoc.Paths)
        {
            foreach (var (_, operation) in pathItem.Operations)
            {
                var apiDesc = context.ApiDescriptions.FirstOrDefault(d => 
                    d.RelativePath == pathKey && d.HttpMethod == operation.OperationId.Split('_')[0]);
                var actionDesc = apiDesc?.ActionDescriptor as ControllerActionDescriptor;

                if (actionDesc != null 
                    && actionDesc.ControllerTypeInfo.BaseType == baseControllerType 
                    && actionDesc.ActionName == nameof(BaseController.DuplicateAsync))
                {
                    pathsToRemove.Add(pathKey);
                    break;
                }
            }
        }

        foreach (var path in pathsToRemove)
        {
            swaggerDoc.Paths.Remove(path);
        }
    }
}
  1. 在Swagger配置中注册过滤器(以.NET 6+的Program.cs为例):
builder.Services.AddSwaggerGen(c =>
{
    c.DocumentFilter<IgnoreBaseControllerDuplicateActionFilter>();
    // 其他Swagger配置项
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:21