.net core 在 Swagger UI中顯示 Header
新增swagger
1)需要 先新增兩個nuget元件
2)新增完成後,需要修改專案屬性,新增xml文件支援
新增完成。
接下來新增header
建立兩個類,一個是過濾器,一個是swagger的過濾類
1)過濾器類:
public class WebApiAuthFilterAttribute:AuthorizeAttribute {
static CommonLogger log = new CommonLogger(typeof(WebApiAuthFilterAttribute));
public override void OnAuthorization(HttpActionContext actionContext)
{
CommonChecker.printPerfomance("過濾器驗證開始", DateTime.Now);
CommonChecker.CheckHeader(actionContext);//此方法為檢查header中是否有引數,此處檢查如果不通過,會丟擲異常
//webAPI應當有對異常的全域性處理類,保證API不會返回500錯誤。
}
}
2)建立swagger過濾類
public class GlobalHttpHeaderFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
operation.parameters = new List<Parameter>();
var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); //判斷是否新增許可權過濾器
var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter); //判斷是否允許匿名方法
var isNeedLogin = apiDescription.ActionDescriptor.GetCustomAttributes<WebApiAuthFilterAttribute>().Any(); //此處放置剛才建立的驗證類
if (isNeedLogin)//如果有驗證標記則 多輸出2個文字框(swagger form提交時會將這2個值放入header裡)
{
operation.parameters.Add(new Parameter { name = "openID", @in = "header", description = "登入成功時返回的openID", required = false, type = "string" });
operation.parameters.Add(new Parameter { name = "telephone", @in = "header", description = "獲取手機號時返回的手機號", required = false, type = "string" });
operation.parameters.Add(new Parameter { name = "token", @in = "header", description = "獲取手機號時返回的sessionID", required = false, type = "string" });
}
}
}
3) 在swaggerConfig.cs中添加註冊程式碼
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.OperationFilter<Filters.GlobalHttpHeaderFilter>();/*新增此行*/
});
在需要驗證的controller前面加上過濾器標記
執行結果如圖:
摘錄來源: https://blog.csdn.net/zhang_adrian/article/details/90241878