在ASP.NET Core 2 Web API
,使用Swashbuckle.AspNetCore包2.1.0,實現IDocumentFilter:
SwaggerSecurityRequirementsDocumentFilter.cs
using System.Collections.Generic;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace api.infrastructure.filters
{
public class SwaggerSecurityRequirementsDocumentFilter : IDocumentFilter
{
public void Apply(SwaggerDocument document, DocumentFilterContext context)
{
document.Security = new List<IDictionary<string, IEnumerable<string>>>()
{
new Dictionary<string, IEnumerable<string>>()
{
{ "Bearer", new string[]{ } },
{ "Basic", new string[]{ } },
}
};
}
}
}
在Startup.cs,配置安全定義和註冊自定義過濾器:
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
// c.SwaggerDoc(.....
c.AddSecurityDefinition("Bearer", new ApiKeyScheme()
{
Description = "Authorization header using the Bearer scheme",
Name = "Authorization",
In = "header"
});
c.DocumentFilter<SwaggerSecurityRequirementsDocumentFilter>();
});
}
在Swagger UI中,點擊授權按鈕併爲令牌設置值。
結果:
curl -X GET "http://localhost:5000/api/tenants" -H "accept: text/plain" -H "Authorization: Bearer ABCD123456"
嗨感謝分享這個,這是我所需要的。有沒有一種方法可以禁用某些API方法?例如,用戶登錄不需要通過該標頭,因爲它返回Auth令牌。該添加的'MyHeaderField'是所有API方法Swagger文檔。 –
@NeilHodges你知道了嗎?我甚至在尋找它。 –
@ gee'K'iran您可以通過檢查操作和apiDescription參數並選擇添加標題來選擇性地應用功能。 – Corcus