如何使用最小的 api .net 6 对端点进行排序

Mat*_*ard 3 swagger .net-6.0 minimal-apis

我正在尝试以最小的 API 掌握 swagger 的窍门。我有以下代码:

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(setup => setup.SwaggerDoc("v1", new OpenApiInfo()
{
    Description = "An api that will change your life for ever",
    Title = "Alert Api",
    Version = "v1",
    Contact = new OpenApiContact()
    {
        Name = "Grundfos",
        Url = new Uri("https://grundfos.com")
    }
}));
WebApplication app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

//Map endpoints
app.MapGet("/alerts", async () => Results.Ok());
app.MapGet("/profiles", async () => Results.Ok());
Run Code Online (Sandbox Code Playgroud)

这给出了一个看起来像这样的 swagger UI:

招摇界面

我的问题是:如何将端点排序到名为“警报”和“配置文件”的标题下?

Viv*_*ndi 5

我认为你所追求的就是所谓的Tags招摇。

您可以WithTags在映射的末尾添加,如下所示:

//Map endpoints
app.MapGet("/alerts", async () => Results.Ok()).WithTags("Alerts");
app.MapGet("/profiles", async () => Results.Ok()).WithTags("Profiles");
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述


或者,您也可以通过配置AddSwaggerGen方法来采取另一种方法。

在那里,您可以获取 URL 端点的第一段并将其用作标签名称。

例如,端点alertsalerts/delete都将放置在名为 的部分中alerts

builder.Services.AddSwaggerGen(c =>
{
    c.TagActionsBy(d =>
    {
        var rootSegment = d.RelativePath?
            .Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)
            .FirstOrDefault() ?? "Home";
        return new List<string> { rootSegment! };
    });
})


//Map endpoints without 'WithTags`
app.MapGet("/alerts", async () => Results.Ok());
app.MapGet("/alerts/delete", async () => Results.Ok());
app.MapGet("/profiles", async () => Results.Ok());
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述