Asp.Net Core webApi 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 防止到全局,但也沒有大問題,畢竟用一次.

Asp.Net Core webApi Swagger  配置說明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章