{            c.Opera..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何配置Swagger?

發(fā)布時間:2020-05-29 14:44:35 來源:億速云 閱讀:356 作者:鴿子 欄目:開發(fā)技術(shù)

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 = "權(quán)限認(rèn)證(數(shù)據(jù)將在請求頭中進(jìn)行傳輸) 參數(shù)結(jié)構(gòu): \"Authorization: Bearer {token}\"",
                Name = "Authorization",//jwt默認(rèn)的參數(shù)名稱
                In = "header",//jwt默認(rèn)存放Authorization信息的位置(請求頭中)
                Type = "apiKey"
            });//Authorization的設(shè)置

        });

?  c.OperationFilter<HttpAuthHeaderFilter>(); 這只是一個自定義個 Paramater 的過濾器.用戶為哦通用添加 信息,為特定Filter 添加信息用

? var security = new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] { } }, };
                c.AddSecurityRequirement(security);
                //,和AddSecurityDefinition方法指定的方案名稱要一致,
                //這里是Bearer。這也是我們之后看見的, Authore.Lock 的原因.因為
我們是開發(fā)的API 有些必須要有 認(rèn)證所以我就添加了全局的注冊.
? 一下這些 就是類型轉(zhuǎn)化的配置 
c.DescribeStringEnumsInCamelCase();
         c.DescribeAllParametersInCamelCase();
         c.DescribeAllEnumsAsStrings();
?   中間的就不用說了Asp.net Core 官網(wǎng)上都有
?  
 c.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description = "權(quán)限認(rèn)證(數(shù)據(jù)將在請求頭中進(jìn)行傳輸) 參數(shù)結(jié)構(gòu): \"Authorization: Bearer {token}\"",
                    Name = "Authorization",//jwt默認(rèn)的參數(shù)名稱
                    In = "header",//jwt默認(rèn)存放Authorization信息的位置(請求頭中)
                    Type = "apiKey"
                });//Authorization的設(shè)置
這是核心的因為有了他才會有可定制的 UI 否者不會有我們先看到.
? 同時我個人還沒有就為單個api 添加 Token 開關(guān). 也不不知如何添加 

這樣我們的東西可以用了但是要注意 這里用是 jwt  Bearer 他提交時是沒有給你添加Bearer 所以在使用時 Authorization: Bearer {token} 需要自己加上 Bearer

 延續(xù)
看了一下代碼,突來了點靈感 實現(xiàn)了一下單個Action 的 token 認(rèn)證 這個我們需要用到. 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;          就是安全認(rèn)證的信息 配置,我沒找到 api doc ,

有了他
我們還要把 :
c.AddSecurityRequirement(security);
注釋了,因為他時注冊全局的 身份認(rèn)賬.
其他的就不用做修改了, 這里我比較懶  和和代碼的容易理解 沒有 把配置信息 list 防止到全局,但也沒有大問題,畢竟用一次

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI