Asp.Net Core webApi Swagger 配置说明
概要
在官网上很容 可以找到开启Swagger Gen 的配置信息,这也是我们快速开发 Api 的开始
使得我们不用写API 的文档和测试了 .理想很丰满,但在使用时我们 部分Get 接口可以用了但是
我们Post 时候需要我们做 身份验证了,Token 是不错的选择.这也是.我学习Swagger ,不精
的问题.怎么开启身份认证?.
在官网上很容 可以找到开启Swagger Gen 的配置信息,这也是我们快速开发 Api 的开始
使得我们不用写API 的文档和测试了 .理想很丰满,但在使用时我们 部分Get 接口可以用了但是
我们Post 时候需要我们做 身份验证了,Token 是不错的选择.这也是.我学习Swagger ,不精
的问题.怎么开启身份认证?.
进入正题
我把我用到的所有代码黏贴出来:一个个的说:
Swagger 注册:
services.AddSwaggerGen(c => { c.OperationFilter<HttpAuthHeaderFilter>(); var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } }, }; c.AddSecurityRequirement(security); //添加一个必须的全局安全信息 //,和AddSecurityDefinition方法指定的方案名称要一致, //这里是Bearer。 c.DescribeStringEnumsInCamelCase(); c.DescribeAllParametersInCamelCase(); c.DescribeAllEnumsAsStrings(); c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info { Title = "接口文档", Version = "v1", Description = "YiSpace LazyCoder is Make", }); string[] files = Directory.GetFiles(AppContext.BaseDirectory, "*.xml"); // var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; // var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); foreach (var item in files) { c.IncludeXmlComments(item, true); } //var xmlPath = Path.Combine(AppContext.BaseDirectory, ""); //c.IncludeXmlComments(xmlPath); //var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); //c.IncludeXmlComments(xmlPath); // c.IgnoreObsoleteActions(); c.AddSecurityDefinition("Bearer", new ApiKeyScheme { Description = "权限认证(数据将在请求头中进行传输) 参数结构: \"Authorization: Bearer {token}\"", Name = "Authorization",//jwt默认的参数名称 In = "header",//jwt默认存放Authorization信息的位置(请求头中) Type = "apiKey" });//Authorization的设置 }); ? c.OperationFilter<HttpAuthHeaderFilter>(); 这只是一个自定义个 Paramater 的过滤器.用户为哦通用添加 信息,为特定Filter 添加信息用 ? var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } }, }; c.AddSecurityRequirement(security); //,和AddSecurityDefinition方法指定的方案名称要一致, //这里是Bearer。这也是我们之后看见的, Authore.Lock 的原因.因为 我们是开发的API 有些必须要有 认证所以我就添加了全局的注册. ? 一下这些 就是类型转化的配置 c.DescribeStringEnumsInCamelCase(); c.DescribeAllParametersInCamelCase(); c.DescribeAllEnumsAsStrings(); ? 中间的就不用说了Asp.net Core 官网上都有 ? c.AddSecurityDefinition("Bearer", new ApiKeyScheme { Description = "权限认证(数据将在请求头中进行传输) 参数结构: \"Authorization: Bearer {token}\"", Name = "Authorization",//jwt默认的参数名称 In = "header",//jwt默认存放Authorization信息的位置(请求头中) Type = "apiKey" });//Authorization的设置 这是核心的因为有了他才会有可定制的 UI 否者不会有我们先看到. ? 同时我个人还没有就为单个api 添加 Token 开关. 也不不知如何添加 这样我们的东西可以用了但是要注意 这里用是 jwt Bearer 他提交时是没有给你添加Bearer 所以在使用时 Authorization: Bearer {token} 需要自己加上 Bearer 延续 看了一下代码,突来了点灵感 实现了一下单个Action 的 token 认证 这个我们需要用到. IOperationFilter /// <summary> /// swagger 增加 AUTH 选项 /// </summary> public class HttpAuthHeaderFilter : IOperationFilter { public void Apply(Operation operation, OperationFilterContext context) { var HasAuth = context.ApiDescription.ActionDescriptor.FilterDescriptors.Any(t => t.Filter is Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter); if (HasAuth) { //operation.Security =new var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } }, }; var ls = new List<IDictionary<string, IEnumerable<string>>>(); ls.Add(security); operation.Security = ls; } } } operation.Security = ls; 就是安全认证的信息 配置,我没找到 api doc ,
有了他
我们还要把 :
c.AddSecurityRequirement(security);
注释了,因为他时注册全局的 身份认账.
其他的就不用做修改了, 这里我比较懒 和和代码的容易理解 没有 把配置信息 list 防止到全局,但也没有大问题,毕竟用一次.
相关推荐
SAMXIE 2020-11-04
pontuss 2020-05-08
pontuss 2020-05-08
playis 2020-02-13
XuDanT 2020-09-16
permanent00 2020-09-15
哈嘿Blog 2020-09-08
Qizonghui 2020-08-02
莫问前程 2020-08-02
SAMXIE 2020-07-26
XuDanT 2020-07-24
莫问前程 2020-07-18
Qizonghui 2020-07-18
coolhty 2020-07-05
Qizonghui 2020-06-28
Qizonghui 2020-06-25
莫问前程 2020-06-22
SAMXIE 2020-06-14