.NET培训
美国上市.NET培训机构

400-111-8989

热门课程

.NET Core在网关中统一配置Swagger

  • 时间:2018-05-25 17:31
  • 发布:.Net培训
  • 来源:NET知识

最近在做微服务的时候,由于我们是采用前后端分离来开发的,提供给前端的直接是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 void ConfigureServices(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 void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

app.UseMetricsAllMiddleware();

app.UseMetricsAllEndpoints();

app.UseCors("default");

var apis = new List { "BasicDataApi", "UsersApi" };

app.UseMvc()

.UseSwagger()

.UseSwaggerUI(options =>

{

apis.ForEach(m =>

{

options.SwaggerEndpoint($"/{m}/swagger.json", m);

});

});

app.UseOcelot().Wait();

}

最后上图:

.NET Core在网关中统一配置Swagger

感谢大家阅读由.net教程分享的“.NET Core在网关中统一配置Swagger”希望对大家有所帮助,更多精彩内容请关注.net培训机构官网

免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除

上一篇:.NET Core 跨平台执行命令、脚本
下一篇:.NET Core玩转机器学习

.NET Core 2.1发布!

.NET中可空值类型实现原理

.NET Core玩转机器学习

.NET Core在网关中统一配置Swagger

选择城市和中心
贵州省

广西省

海南省