当前位置: 首页 > 知识库问答 >
问题:

使用单个C # ASP.NET核心应用程序在不同的URL上提供多个Swagger用户界面

宁修永
2023-03-14

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

每个Swaggerendpoint都应该在自己的Swagger UI页面上,并具有不同的URL地址。我能够在<code>启动时使用此代码将现有API规范划分为两个不同的json文件,并将json文件划分为不同的路径。cs配置方法:

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

我通过在<code>Startup.cs<code>中过滤和添加两个摆动发生器来划分规范:

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

然后在<code>上提供Swagger UIhttps://localhost:port/swagger两个endpoint都列在下拉菜单中。

当另一个位于路由上时,我如何创建两个 swagger UI,而另一个是

共有1个答案

隗轶
2023-03-14

您需要将私有和公共控制器拆分为单独的应用程序。这样做也是有益的,因为您不想将公开访问的API与内部API混合。以这种方式维护将更容易。

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

 类似资料:
  • 我正在尝试在具有两个应用程序类的 Java 应用程序上实现 Swagger,因为一个处理“公共”Web 服务,另一个处理“管理”Web 服务。我正在尝试生成两个单独的 swagger.json 文件,每个应用程序类一个。但是,仅为两个 url 生成其中一个。下面是一些代码: 公共应用程序类: 私有应用程序类: 现在,如果我点击这些URL中的任何一个,我都会得到相同的“公共”swagger json

  • 这可能不是典型的设置,但由于更高的决策,我们最终在一个应用程序中有多个 kafka 集群,每个集群有多个主题,每个集群可能具有不同的序列化策略。Json/avro.avro可能与融合的架构注册表一起使用,或者使用单个对象编码。 好吧,我通过构建自己的抽象和注册中心,分析配置并手动创建大部分内容,以某种方式实现了它,但我觉得我需要在几个地方多次重复主题名称、模式注册url等内容,以便创建所有需要的b

  • 假设我在同一个公共Docker映像上安装了一个Web服务器和一个数据库服务器,是否可以同时运行它们,就像它们在同一个虚拟机中运行一样? 它正在运行<代码>docker run吗

  • 这是我的节点文件 我在上有HTML 和上的节点应用程序 我也转发了3000端口到80; 我想在这个服务器上的一个不同的端口上运行多个应用程序。 我应该为其他应用程序配置什么。

  • 我目前对我的Web api使用< code>Fluent Validation而不是< code>Data Annotations,并对api文档使用swagger。流畅验证规则没有反映在swagger模型中,因为我无法使用swagger模式过滤器配置流畅验证规则。 这个博客有一个很好的解释,它与ASP.netMVC. 到目前为止,我已经尝试了以下代码,但我无法获得验证器类型。