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

能否通过NSwag在Swagger UI中按程序集而非控制器分组API操作?

当然可以实现按程序集分组API的需求!NSwag提供了灵活的分组配置能力,你只需要在Swagger文档生成的配置里自定义分组规则就行,下面是具体的实现步骤:

方法一:直接使用程序集名称作为分组名

在配置NSwag的AddOpenApiDocument(或AddSwaggerDocument,取决于你的.NET版本)时,通过OperationGroupSelector委托指定分组逻辑:

builder.Services.AddOpenApiDocument(settings =>
{
    // 保留你原有的其他配置,比如标题、版本等
    settings.Title = "My API";
    settings.Version = "v1";

    // 核心:设置分组选择器,按控制器所在程序集分组
    settings.OperationGroupSelector = operation =>
    {
        // 获取当前API对应的控制器类型
        var controllerType = operation.ControllerType;
        // 返回程序集名称作为分组名,兜底用"Unknown Assembly"
        return controllerType?.Assembly.GetName().Name ?? "Unknown Assembly";
    };
});

这段代码的逻辑很简单:每个API操作都会触发这个委托,我们通过operation.ControllerType拿到该API所属的控制器类型,再获取控制器所在的程序集名称,以此作为分组标识。这样同一程序集下的所有控制器API就会被自动归到同一个组里。

方法二:自定义友好的分组名称(可选)

如果你不想直接用程序集的原始名称(比如太长或者不够直观),可以给程序集添加自定义特性,然后读取特性值作为分组名:

  1. 先定义一个用于标记程序集分组名称的特性:
[AttributeUsage(AttributeTargets.Assembly)]
public class SwaggerAssemblyGroupNameAttribute : Attribute
{
    public string GroupName { get; }

    public SwaggerAssemblyGroupNameAttribute(string groupName)
    {
        GroupName = groupName;
    }
}
  1. 在你的目标程序集的AssemblyInfo.cs(或直接在项目根文件中)添加特性标记:
[assembly: SwaggerAssemblyGroupNameAttribute("订单管理模块")]
  1. 修改NSwag的分组选择器,读取这个特性的值:
builder.Services.AddOpenApiDocument(settings =>
{
    // 其他配置...

    settings.OperationGroupSelector = operation =>
    {
        var controllerType = operation.ControllerType;
        if (controllerType == null) return "未分组";

        // 读取程序集上的自定义特性
        var groupAttr = controllerType.Assembly.GetCustomAttribute<SwaggerAssemblyGroupNameAttribute>();
        // 优先用自定义分组名,否则 fallback 到程序集名称
        return groupAttr?.GroupName ?? controllerType.Assembly.GetName().Name;
    };
});

生效验证

配置完成后启动项目,打开Swagger UI,你会看到顶部的分组下拉框里显示的是各个程序集对应的分组名称,切换分组就能看到该程序集下的所有API了,完美替代默认的按控制器分组逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:48