asp.net-core - ASP.NET Core 中 Swagger 5 中的 AuthorizeCheckOperationFilter
问题描述
我一直在旧版本的 Swagger 中使用这种方法:
public class AuthorizeCheckOperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
var authAttributes = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
.Union(context.MethodInfo.GetCustomAttributes(true))
.OfType<AuthorizeAttribute>();
if (authAttributes.Any())
{
operation.Responses.Add("401", new Response { Description = "Unauthorized" });
operation.Security = new List<IDictionary<string, IEnumerable<string>>>
{
new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", new[] { "myscope" } }
}
};
}
}
}
但是,现在界面变成了这样:
public class AuthorizeCheckOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
throw new NotImplementedException();
}
}
如何转换代码?:-)
非常感谢!贡纳尔
解决方案
您可以参考官方 github 文档进行如下更改:
public class AuthorizeCheckOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var authAttributes = context.MethodInfo
.GetCustomAttributes(true)
.OfType<AuthorizeAttribute>()
.Select(attr => attr.Policy)
.Distinct();
if (authAttributes.Any())
{
operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });
var oAuthScheme = new OpenApiSecurityScheme
{
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" }
};
operation.Security = new List<OpenApiSecurityRequirement>
{
new OpenApiSecurityRequirement
{
[ oAuthScheme ] = authAttributes.ToList()
}
};
}
}
}
推荐阅读
- r - 在列中交换值 - R
- google-cloud-platform - 未验证应用的 OAuth 到 Google API 的 100 个用户上限
- java - 将“XML 元素”解组为字符串属性
- anaconda - 在 Google Drive 上安装 Anaconda 环境以供重复使用或在多个 Google Colab VM 中使用
- python - Python - 从转折点坐标生成多项式
- c - 如何在 C 中使用 isdigit 函数
- html - 焦点女巫 HTML/CSS 上的图标颜色更改
- laravel - 数字海洋水滴的高内存使用率
- unix - 使用 awk 将字段从第 n 个重新排序到 NF-1
- reactjs - 使用 React Router 的 React Styleguide