如何配置Swagger?
更新:HHH   时间:2023-1-7


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 防止到全局,但也没有大问题,毕竟用一次

返回开发技术教程...