ASP.NET Core & Swagger:生成多个输出

use*_*834 5 c# swagger asp.net-core openapi swagger-codegen

我正在使用Swashbuckle.AspNetCore.SwaggerGen版本 v6.1.5 的 ASP.NET Core。

我希望像[HttpGet][HttpGet("user")]in a public这样的路由swagger.json用于公共端点,而包含internal在像这样的路由内部的其他路由[HttpGet("internal/user/{userGuid}")]位于swagger.json端点的内部实例中。

我在启动时配置 SwaggerConfigureServices如下:

services.AddSwaggerGen(gen =>
{
    gen.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Server API",
        Version = "1.0",
        Description = "This API features all public available endpoints showing different API features."
    });
    gen.SwaggerDoc("v1-internal", new OpenApiInfo
    {
        Title = "Viewer Server API (internal)",
        Version = "v1-internal",
        Description = "This API features all public available endpoints showing different API features."
    });
});
Run Code Online (Sandbox Code Playgroud)

并在Configure

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Viewer Server API v1");
    c.SwaggerEndpoint("/swagger/v1-internal/swagger.json", "Viewer Server API v1 (internal)");
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它创建一个 public 和一个 inside swagger.json

use*_*834 10

过滤不同的version或在我的例子中的“可见性层”可以像下面这样完成。在启动时配置 Swagger,如下ConfigureServices所示:

services.AddSwaggerGen(gen =>
{
    gen.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Server API",
        Version = "1.0",
        Description = "This API features all public available endpoints showing different API features."
    });
    gen.SwaggerDoc("v1-internal", new OpenApiInfo
    {
        Title = "Viewer Server API (internal)",
        Version = "v1-internal",
        Description = "This API features all public available endpoints showing different API features."
    });

    gen.DocInclusionPredicate((docName, apiDesc) =>
    {
        if (docName.Contains("internal"))
        {
            return apiDesc.RelativePath.Contains("internal/");
        }
        else
        {
            return !apiDesc.RelativePath.Contains("internal/");
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

并在Configure

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Viewer Server API v1");
    c.SwaggerEndpoint("/swagger/v1-internal/swagger.json", "Viewer Server API v1 (internal)");
});
Run Code Online (Sandbox Code Playgroud)

现在您可以选择不同的配置,如下图所示: 在此输入图像描述