У меня есть настройка Swagger UI для моего API, и я хочу добавить параметр авторизации для методов контроллера с атрибутом [Authorize]
из Microsoft.AspNetCore.Authorization
В настоящее время у меня есть настраиваемый класс фильтра, настроенный путем поиска в Google для этого, который выглядит следующим образом:
public class AuthHeaderFilter : Swashbuckle.AspNetCore.SwaggerGen.IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors;
var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter);
var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter);
if (isAuthorized && !allowAnonymous)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Insert(0, new OpenApiParameter
{
Name = "Authorization",
In = ParameterLocation.Header,
Description = "access token",
Required = true,
Schema = new OpenApiSchema
{
Type = "String",
}
});
}
}
}
Проблема в том, что ни один метод не получает параметр авторизации, добавленный в пользовательский интерфейс. Я отладил этот класс с помощью методов, к которым был применен атрибут authorize, и обнаружил, что проблема в том, что filterPipeline, производный от FilterDescriptors, не содержит AuthorizeFilter. Есть ли что-то, что нужно добавить в класс запуска, который обрабатывает, как этот атрибут добавляется к пропущенным фильтрам?