【问题标题】:ASP.NET Core & Swagger : generate multiple outputsASP.NET Core & Swagger:生成多个输出
【发布时间】:2021-10-28 12:50:33
【问题描述】:

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

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

我在 ConfigureServices 的启动中配置 Swagger,如下所示:

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."
    });
});

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)");
});

如何获得它来创建公共和内部swagger.json

【问题讨论】:

  • this 是你想要的吗?
  • @AndrewSilver 我不知道排序发生在哪里,请参阅更新的问题。
  • 没关系,我找到了解决方案,会发布答案。

标签: c# asp.net-core swagger openapi swagger-codegen


【解决方案1】:

过滤不同的version 或者在我的情况下是“可见性层”可以像下面那样完成。 在ConfigureServices 的启动中配置 Swagger,如下所示:

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/");
        }
    });
});

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)");
});

现在您可以选择不同的配置,如下图所示:

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多