{ c.Opera..."/>
您好,登錄后才能下訂單哦!
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 防止到全局,但也沒有大問題,畢竟用一次
免責(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)容。