概要
在官網上很容 能夠找到開啓Swagger Gen 的配置信息,這也是咱們快速開發 Api 的開始
使得咱們不用寫API 的文檔和測試了 .理想很豐滿,但在使用時咱們 部分Get 接口能夠用了可是
咱們Post 時候須要咱們作 身份驗證了,Token 是不錯的選擇.這也是.我學習Swagger ,不精
的問題.怎麼開啓身份認證?.web
進入正題api
我把我用到的全部代碼黏貼出來:一個個的說:安全
Swagger 註冊:ide
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 防止到全局,但也沒有大問題,畢竟用一次.學習