如何配置Swagger?
admin
2023-02-16 14:00:12
0

Swagger 注册:

        services.AddSwaggerGen(c =>
        {
            c.OperationFilter();
            var security = new Dictionary> { { "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(); 这只是一个自定义个 Paramater 的过滤器.用户为哦通用添加 信息,为特定Filter 添加信息用

• var security = new Dictionary> { { "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

/// 
/// swagger 增加 AUTH 选项
/// 
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> { { "Bearer", new string[] { } }, };
            var ls = new List>>();
            ls.Add(security);
            operation.Security = ls;               
        }
      }
}
   operation.Security = ls;          就是安全认证的信息 配置,我没找到 api doc ,

有了他
我们还要把 :
c.AddSecurityRequirement(security);
注释了,因为他时注册全局的 身份认账.
其他的就不用做修改了, 这里我比较懒  和和代码的容易理解 没有 把配置信息 list 防止到全局,但也没有大问题,毕竟用一次

相关内容

热门资讯

陕西国基未来取得一种水泥胶砂搅... 国家知识产权局信息显示,陕西国基未来检验检测有限公司取得一项名为“一种水泥胶砂搅拌机”的专利,授权公...
手机换屏换壳靠谱推荐,让你的手... 在如今这个数字化时代,手机已经成为人们生活中不可或缺的一部分。然而,手机在日常使用中难免会遭遇各种意...
人工智能PC已主导2026 C... 【CNMO科技】2026年CES展会如期拉开帷幕,与过往类似,笔记本电脑和台式电脑再次成为各大品牌发...
技术创新驱动山西储能产业升级 来源:科技日报 在能源革命与“双碳”目标深入推进的关键阶段,山西推动储能产业从“点状突破”向“系统布...
李湘多平台账号被禁止关注 1月16日,李湘微博、抖音、小红书等多平台账号被禁止关注。
局地降雪可达15厘米!河南发布... 据气象部门预报,1月18日夜间至20日,河南省将出现一次强降雪过程。1月16日,河南省防灾减灾救灾委...
阿里抢攻AI入口之战 阿里想把命运牢牢握在自己手里,尤其AI时代。1月15日,千问App宣布接入淘宝、支付宝、淘宝闪购等阿...
美国驻冰岛大使候选人称冰岛或成... 据美国“政治新闻网”、《时代》周刊网站等媒体报道,在美国威胁吞并格陵兰岛的紧张局势不断升温之际,美国...
郑州海关:开发“AI智审”应用... 【大河财立方 记者 闫文瑞】1月16日,河南省政府新闻办召开2025年河南省外贸进出口情况新闻发布会...
河南崛起算力高地 千行百业数智... 翻开北宋名画《清明上河图》,在汴京街市“赵太丞家”药铺的柜台上,一架算盘静卧其间——那是中原大地的传...