在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