使用单个 C# ASP.NET Core 应用程序在不同 URL 上提供多个 Swagger UI

Aks*_*sim 9 c# swagger swashbuckle

我需要在单个 C# ASP.NET Core 应用程序上提供多个 swagger UI。这是必需的,因为应用程序 API 包含用于 UI 和其他内容的内部“私有”API 以及可由其他应用程序和用户访问的“公共”API。

每个 Swagger 端点都应该位于其自己的 swagger UI 页面上,并具有不同的 URL 地址。我可以使用以下方法代码将现有 API 规范划分为两个不同的 json 文件和不同路径中的 json 文件Startup.cs Configure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ 
    ...

    app.UseSwagger()
    app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("v0.1_public/swagger.json",  "Public API v0.1");
                c.SwaggerEndpoint("v0.1_private/swagger.json", "Private API v0.1");
            });
    ...
}
Run Code Online (Sandbox Code Playgroud)

我通过过滤并添加两个 Swagger 生成器来划分规范Startup.cs

public void ConfigureServices(IServiceCollection services)
{
     ...
     services.AddSwaggerGen(c =>
        {
            c.DocumentFilter<PublicAPISwaggerFilter>();
            c.SwaggerDoc("v0.1_public", new OpenApiInfo
            {
                Title = "Public API",
                Version = "v0.1"
            });
        });
     services.AddSwaggerGen(c =>
        {
            c.DocumentFilter<PrivateApiSwaggerFilter>();
            c.SwaggerDoc("v0.1_private", new OpenApiInfo
            {
                Title = "Private API",
                Version = "v0.1"
            });
        });
     ...
}
Run Code Online (Sandbox Code Playgroud)

然后提供 Swagger UI https://localhost:port/swagger,并且两个端点都列在下拉菜单中。

https://locahost:port/private/swagger当另一个在路线上而另一个在路线上https://locahost:port/public/swagger并且每个 UI 仅显示上述端点之一时,如何创建两个 swagger UI ?

小智 -3

您需要将私人和公共控制器分成单独的应用程序。这样做也是有益的,因为您不想将可公开访问的 API 与内部 API 混合在一起。这样维护起来会更容易。

如果它是您所需要的特定 URL 约定,则可以由 IIS 或您用于托管应用程序的其他工具来处理。