【问题标题】:Multiple API endpoints based on Modules基于模块的多个 API 端点
【发布时间】:2018-04-01 16:45:33
【问题描述】:

我正在使用带有 .NET Core 和 Angular 2 项目模板的 ASP.NET Boilerplate v2.0.1。

我的项目中有多个模块,当前使用相同的 API 端点提供服务。请注意,将来我将为单个模块设置单独的 API 端点。

由于每个模块的 API 端点都是相同的,因此通过 NSwag 生成的服务代理将拥有所有模块的服务。

我需要基于单个模块生成代理,所以为此,我想到了使用 API 版本控制来完成。因此,我将附加模块名称,而不是 v1、v2 等。

我有以下代码:

Configuration.Modules.AbpAspNetCore()
             .CreateControllersForAppServices(
                 typeof(Module).GetAssembly(),
                 "modulename"
             );

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("module1", new Info { Title = "Module 1", Version = "module1" });
    options.SwaggerDoc("module2", new Info { Title = "Module 2", Version = "module2" });
}

app.UseSwagger(options =>
{
    options.RouteTemplate = "swagger/{documentName}/swagger.json";
});

// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/swagger/module1/swagger.json", "Module 1");
    options.SwaggerEndpoint("/swagger/module2/swagger.json", "Module 2");
});

这样,我可以生成如下两个端点:

http://localhost:5000/swagger/module1/swagger.json

http://localhost:5000/swagger/module2/swagger.json

但两者都拥有所有模块的信息。

请纠正我或提出实现该功能的方法。

【问题讨论】:

    标签: c# .net-core swagger aspnetboilerplate swashbuckle


    【解决方案1】:

    看起来您正在使用 swashbuckle 而不是 NSwag 来生成您的 swagger 文档。有多种方法可以按版本分隔文档,请参阅 swashbuckle 文档https://github.com/domaindrivendev/Swashbuckle.AspNetCore。默认方法是使用上面的启动配置,并使用相应的 ApiExplorer 组名称装饰您的方法。组名需要与 swaggerdoc 配置中指定的第一个参数匹配。

    [ApiExplorerSettings(GroupName = "module1")] //Module 1 Method
    

    您还缺少第二个 swagger 端点的模块中的“e”。

    参见示例:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/4bbf5cacd6ad0817b9015d699c559fd5c1cedf0d/test/WebSites/MultipleVersions/Startup.cs

    【讨论】:

      【解决方案2】:

      要添加多个源,请编辑 SwaggerUIOptions。 例如:

      app.UseSwaggerUI(c => 
      {
          c.SwaggerEndpoint("http://<ip1>:<port>/swagger/v1/swagger.json", "ServiceName1");
          c.SwaggerEndpoint("http://<ip2>:<port>/swagger/v1/swagger.json", "ServiceName2");
      });
      

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 2023-01-04
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多