先亮源代码:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo

这篇博文不是对asp.net core中使用Swagger作介绍,因为社区博客作了详细说明。

今天主要说一下Swagger在Ocelot网关权限验证模式下的访问,以及Swagger请求应答的数据格式。

首先创建四个项目:

SwaggerOcelot:asp.net core web api类型,api网关项目

SwaggerAuthorize:asp.net core web api类型,用户验证项目

SwaggerAPI01:asp.net core web api类型,api 1项目

SWaggerAPI02:asp.net core web api类型,api 2项目

首先在四个项目中添加基于Jwt的Toekn认证,参见https://www.cnblogs.com/axzxs2001/p/9250588.html

再在四个项目Nuget中引入Swashbuckle.AspNetCore,我的Demo中用的是2.5.0,再分别配置Swagger

SwaggerAuthorize  Starup.cs配置

 public void ConfigureServices(IServiceCollection services)
{
services.AddTokenJwtAuthorize();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("SwaggerAuthorize", new Info { Title = "Authorize", Version = "v1", Contact = new Contact { Email = "285130205@qq.com", Name = "Authorize", Url = "http://0.0.0.0" }, Description = "Authorize项目" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "SwaggerAuthorize.xml");
options.IncludeXmlComments(xmlPath);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseMvc()
.UseSwagger(options =>
{
options.RouteTemplate = "{documentName}/swagger.json";
})
.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/SwaggerAuthorize/swagger.json", "Authorize");
});
}

SwaggerAPI01,SwaggerAPI02类似,Starup.cs配置,其中让Swagger支付Token验证,就是要在这部分添加Swagger配置

 public void ConfigureServices(IServiceCollection services)
{
services.AddApiJwtAuthorize((context) =>
{
return true;
}); services.AddSwaggerGen(options =>
{
options.SwaggerDoc("SwaggerAPI01", new Info { Title = "API01", Version = "v1", Contact = new Contact { Email = "285130205@qq.com", Name = "API01", Url = "http://0.0.0.0" }, Description = "API01项目" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "SwaggerAPI01.xml");
options.IncludeXmlComments(xmlPath); //这里是给Swagger添加验证的部分
options.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "请输入带有Bearer的Token", Name = "Authorization", Type = "apiKey" });
options.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> {
{
"Bearer",
Enumerable.Empty<string>()
}
});
});
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc()
.UseSwagger(options =>
{
options.RouteTemplate = "{documentName}/swagger.json";
})
.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/SwaggerAPI01/swagger.json", "API01");
});
}

SwaggerOcelot,Starup.cs配置

 public void ConfigureServices(IServiceCollection services)
{
services.AddOcelotJwtAuthorize();
//注入Ocelot
services.AddOcelot(Configuration);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddSwaggerGen(options =>
{
options.SwaggerDoc("ApiGateway", new Info { Title = "网关服务", Version = "v1", Contact = new Contact { Email = "285130205@qq.com", Name = "SwaggerOcelot", Url = "http://10.10.10.10" }, Description = "网关平台" });
});
} public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} var apis = new Dictionary<string, string>(
new KeyValuePair<string, string>[] {
KeyValuePair.Create("SwaggerAuthorize", "Authorize"),
KeyValuePair.Create("SwaggerAPI01", "API01"),
KeyValuePair.Create("SwaggerAPI02", "API02")
}); app.UseMvc()
.UseSwagger()
.UseSwaggerUI(options =>
{
apis.Keys.ToList().ForEach(key =>
{
options.SwaggerEndpoint($"/{key}/swagger.json", $"{apis[key]} -【{key}】");
});
options.DocumentTitle = "Swagger测试平台";
});
await app.UseOcelot();
}

接下来,为Swagger访问Web API项目,添加请求返回格式,默认状况下,Swagger是支持Json的,下来添加支持XML格式

第一步,添加支持XML格式

 services.AddMvc()
.AddXmlSerializerFormatters() //设置支持XML格式输入输出
.AddJsonOptions(op => op.SerializerSettings.ContractResolver = new DefaultContractResolver())//大小写不转换
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

第二步,在对应的Action添加ProducesResponseType特性,为转换作支持

 [HttpGet("{id}")]
[ProducesResponseType(typeof(API01Model), )]
public ActionResult<API01Model> Get(int id)
{
return new API01Model { ID = , IsSure = true, Price = 2.3m, Describe = "test1" };
}

运行效果:

先看登录

再看api访问

Swagger如何访问Ocelot中带权限验证的API的更多相关文章

  1. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】

    本文梯子 本文3.0版本文章 前言 1.如何给接口实现权限验证? 零.生成 Token 令牌 一.JWT ——自定义中间件 0.Swagger中开启JWT服务 1:API接口授权策略 2.自定义认证之 ...

  2. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】

    前言 关于JWT一共三篇 姊妹篇,内容分别从简单到复杂,一定要多看多想: 一.Swagger的使用 3.3 JWT权限验证[修改] 二.解决JWT权限验证过期问题 三.JWT完美实现权限与接口的动态分 ...

  3. Thinkphp3.2.3中的RBAC权限验证

    最近在用TP的RBAC权限控制,在这里记录学习一下.先来看看相关的概念 一.相关概念 访问控制与RBAC模型1.访问控制:        通常的多用户系统都会涉及到访问控制,所谓访问控制,是指通过某种 ...

  4. 从壹开始前后端分离 [ vue + .netcore 补程 ] 三十一║ Nuxt终篇:基于Vuex的权限验证探究

    缘起 哈喽大家好,今天周四啦,楼主明天要正式放假了,这里先祝大家节日快乐咯,希望在家里能继续研究点儿东西吧,今天呢是 nuxt 的最后一篇,主要是对权限登录进行研究,这一块咱们之前在说第一个项目的时候 ...

  5. SpringMVC学习系列(9) 之 实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

  6. SpringMVC实现注解式权限验证

    SpringMVC学习系列(9) 之 实现注解式权限验证 对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servle ...

  7. SpringMVC实现注解式权限验证(转)

    SpringMVC学习系列(9) 之 实现注解式权限验证   对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用serv ...

  8. SpringMVC学习(9):实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

  9. SpringMVC(9)实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

随机推荐

  1. 转载:selenium的wait.until()

    package com.test.elementwait; import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;imp ...

  2. python高级编程1

    1.如何在列表,字典,集合中根据条件筛选数据? 如: 过滤列表[3, 9, -1, 10, 20, -2...]中的负数 筛出字典{‘小明’:70, 'Jim':88,'Tom':98...}中值高于 ...

  3. win 上安装cad2002的心得

    前不久,一从事测绘的哥们来找我,要我给她装一专业软件,想想应该很简单,不知为何把他难成这样,他极力要求安装xp系统,说是只有xp上才能装成功,我不信这个邪,查了许多资料发现win 7根本不兼容cad2 ...

  4. Elasticsearch笔记八之脑裂

    Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...

  5. NSQ源码剖析之nsqd

    NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障.故障容错.高可用性以及能够保证消息的 ...

  6. 【组合数学】Bzoj2916 [Poi1997]Monochromatic Triangles

    Description 空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,告诉你哪些点间有一条红线,计算同色三角形的总数. ...

  7. MATLAB R2017b安装及破解(安装详解)

    昨天知道有这个Matlab之后就开始想办法安装,今天为各位小伙伴解答昨天安装的过程,希望能够帮助到你们! 使用的镜像软件,我放在压缩包里面 如果你们感觉下载比较麻烦(可以直接发消息给我,我会发给你们的 ...

  8. 列表(list) ----python

    Python 列表(List) 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型 ...

  9. Entity Framework Core 关联删除

    关联删除通常是一个数据库术语,用于描述在删除行时允许自动触发删除关联行的特征:即当主表的数据行被删除时,自动将关联表中依赖的数据行进行删除,或者将外键更新为NULL或默认值. 数据库关联删除行为 我们 ...

  10. 版本号对比 -- Python实现

    相同位数版本号大小比较: def abc(str1, str2): if str1 == "" or str2 == "": print("输入包含空 ...