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

如何将Scalar中的控制器设置为按字母顺序排列?

解决Scalar左侧面板控制器按字母排序的问题

要让Scalar左侧面板的控制器按字母顺序排列,需要从Swagger文档生成和Scalar UI配置两方面入手,以下是具体方案:

1. 配置Swagger生成时的排序规则

Scalar基于Swagger文档渲染界面,所以首先要确保Swagger生成的文档中控制器相关内容是有序的。在Program.cs的AddSwaggerGen配置中添加排序逻辑:

builder.Services.AddSwaggerGen(options =>
{
    // 按控制器名称字母排序,再按HTTP方法排序动作
    options.OrderActionsBy(apiDesc => $"{apiDesc.ActionDescriptor.RouteValues["controller"]}_{apiDesc.HttpMethod}");
});

2. 开启Scalar UI的排序选项

在配置Scalar UI时,明确开启控制器和端点的排序开关:

app.UseScalarUI(options =>
{
    options.ConfigureDefaults();
    // 开启控制器排序
    options.SortControllers = true;
    // 开启端点排序(可选,让控制器内的接口也按字母排序)
    options.SortEndpoints = true;
});

3. 自定义文档过滤器强制排序(如果前两步无效)

如果上述配置仍不生效,可以通过自定义IDocumentFilter手动对Swagger文档中的Tags(对应Scalar的控制器分组)和路径排序:

第一步:创建自定义过滤器类

public class SortControllersDocumentFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        // 按Tag名称(即控制器名称)字母排序
        swaggerDoc.Tags = swaggerDoc.Tags.OrderBy(tag => tag.Name).ToList();
        
        // 按路径中的控制器部分排序(假设接口路径格式为 /api/[Controller]/[Action])
        swaggerDoc.Paths = swaggerDoc.Paths
            .OrderBy(kv => kv.Key.Split('/')[2], StringComparer.OrdinalIgnoreCase)
            .ToDictionary(kv => kv.Key, kv => kv.Value);
    }
}

第二步:注册过滤器到SwaggerGen

builder.Services.AddSwaggerGen(options =>
{
    // 其他配置...
    options.DocumentFilter<SortControllersDocumentFilter>();
});

注意:如果你的控制器使用了[ApiExplorerSettings(GroupName = "xxx")]自定义分组名称,需要确保分组名称是统一的,排序逻辑要基于实际的分组名称调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:02:28