.net core在Ocelot网关中统一配置Swagger

摘要:
最近在做微服务的时候,由于我们是采用前后端分离来开发的,提供给前端的直接是Swagger,如果Swagger分布在各个API中,前端查看Swagger的时候非常不便,因此,我们试着将Swagger集中放到网关中。这里我用两个API项目和一个网关项目做示例,下面直接上代码。

最近在做微服务的时候,由于我们是采用前后端分离来开发的,提供给前端的直接是Swagger,如果Swagger分布在各个API中,前端查看Swagger的时候非常不便,因此,我们试着将Swagger集中放到网关中。

这里我用两个API项目(一个BasicDataApi,一个UsersApi)和一个网关项目(ApiGateway)做示例,下面直接上代码。

首先在BasicDataApi中配置Swagger:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("BasicDataApi", new Info { Title = "基础数据服务", Version = "v1" });
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "Qka.BasicDataApi.xml");
                options.IncludeXmlComments(xmlPath);
            });
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMvc()
                 .UseSwagger(c =>
            {
                c.RouteTemplate = "{documentName}/swagger.json";
            })
                .UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/BasicDataApi/swagger.json", "BasicDataApi");
            });
        }

在UsersApi中一样的配置:

public void ConfigureServices(IServiceCollection services)
        {          
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("UsersApi", new Info { Title = "用户API接口", Version = "v1" });
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "Qka.UsersApi.xml");
                options.IncludeXmlComments(xmlPath);
            });
            services.AddMvc();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMvc()
                .UseSwagger(c =>
                {
                    c.RouteTemplate = "{documentName}/swagger.json";
                })
                .UseSwaggerUI(options =>
                {
                    options.SwaggerEndpoint("/UsersApi/swagger.json", "UsersApi");
                });
        }                       

最后在网关项目中修改Ocelot配置,获取两个项目的swagger.json不要授权:

  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/UsersApi/swagger.json",
      "DownstreamScheme": "http",
      "ServiceName": "userapi",
      "LoadBalancer": "RoundRobin",
      "UseServiceDiscovery": true,
      "UpstreamPathTemplate": "/UsersApi/swagger.json",
      "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT"]
    },
    {
      "DownstreamPathTemplate": "/BasicDataApi/swagger.json",
      "DownstreamScheme": "http",
      "ServiceName": "basedataapi",
      "LoadBalancer": "RoundRobin",
      "UseServiceDiscovery": true,
      "UpstreamPathTemplate": "/BasicDataApi/swagger.json",
      "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT"]
    },
    {
      "DownstreamPathTemplate": "/UsersApi/{url}",
      "DownstreamScheme": "http",
      "ServiceName": "userapi",
      "LoadBalancer": "RoundRobin",
      "UseServiceDiscovery": true,
      "UpstreamPathTemplate": "/UsersApi/{url}",
      "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT"] ,
      "AuthenticationOptions": {
        "AuthenticationProviderKey": "qka_api",
        "AllowedScopes": []
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:9000",
    "ServiceDiscoveryProvider": {
      "Host": "192.168.2.144",
      "Port": 8500
    }
  }
}

修改StartUp.cs文件的代码,注意在使用中间件的时候,UseMvc一定要在UseOcelot之前。

public voidConfigureServices(IServiceCollection services)
        {
            services.AddOcelot();
            var authenticationProviderKey = "qka_api";
            services.AddAuthentication("Bearer")
                .AddIdentityServerAuthentication(authenticationProviderKey, options =>
                {
                    options.Authority = "http://192.168.2.121:9066/";
                    options.RequireHttpsMetadata = false;
                    options.ApiName = "UserApi";
                });
            services.AddMvc();
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("ApiGateway", new Info { Title = "网关服务", Version = "v1"});
            });
        }
        public voidConfigure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseMetricsAllMiddleware();
            app.UseMetricsAllEndpoints();
            app.UseCors("default");
            var apis = new List<string> { "BasicDataApi", "UsersApi"};
            app.UseMvc()
               .UseSwagger()
               .UseSwaggerUI(options =>
               {
                   apis.ForEach(m =>
                   {
                       options.SwaggerEndpoint($"/{m}/swagger.json", m);
                   });
               });
            app.UseOcelot().Wait();
        }

最后上图:

.net core在Ocelot网关中统一配置Swagger第1张

免责声明:文章转载自《.net core在Ocelot网关中统一配置Swagger》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7 k8s v1.5.2二进制部署安装-网络插件Flannel的安装less 官网讲解 ( http://www.bootcss.com/p/lesscss/ )下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.net core Swagger添加bearer token参数

引入swagger后,在services.AddSwaggerGen中增加如下内容 // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c =>...

SpringBoot之springfox(Swagger) (ApiDoc接口文档)

Springfox的前身是swagger-springmvc,是一个开源的API doc框架,可以将我们的Controller的方法以文档的形式展现,基于Swagger。 官网地址:http://springfox.github.io/springfox/ 1.maven依赖 <!--springfox--> <dependency&g...

懒得写文档,swagger文档导出来不香吗

导航 前言 离线文档 1 保存为html 2 导出成pdf文档 3 导出成Word文档 参考 前言   早前笔者曾经写过一篇文章《研发团队,请管好你的API文档》。团队协作中,开发文档的重要性,这里就不再赘述,今天的话题集中在如何进一步提升更加高效的使用文档。 离线文档   swagger已经很方便了,我们为什么还需要离线文档?公司同一个项目组,...

.net core api +swagger(一个简单的入门demo 使用codefirst+mysql)

前言: 自从.net core问世之后,就一直想了解。但是由于比较懒惰只是断断续续了解一点。近段时间工作不是太忙碌,所以偷闲写下自己学习过程。慢慢了解.net core 等这些基础方面学会之后再用.net core写一个项目,前期文章都是为之后的项目做准备。同时也希望这些基础文章能帮助更多的想入手 .net core的小白。(文中如有不正确地方欢迎各位指正...

Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html 在实际项目中,Api 接口系统对接过程中,Api 接口文档是非常重要的文档。一般是设计完成之...

高并发秒杀系统API之SSM集成swagger与AdminLTE

初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,慕课网地址:https://www.imooc.com/learn/587。 也是我接触Java的第一个项目。本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文,本来接触之初听别人说,c#要转java很容易,我也信了,但是真正去学习的时候还...