Это новый правильный способ обнаружения AllowAnonymous с помощью .net 10 и OpenApi?C#

Место общения программистов C#
Anonymous
Это новый правильный способ обнаружения AllowAnonymous с помощью .net 10 и OpenApi?

Сообщение Anonymous »

Поскольку Microsoft перешла к внесению некоторых серьезных изменений в .net 10 с помощью openapi/swagger, у меня возникли некоторые проблемы с использованием Swagger UI для скрытия значка блокировки на конечной точке [AllowAnonymous], в то время как он был на [Authorize], совместимом с ApiVersioning
Поскольку весь мой поиск в Интернете давал мне решения, которые были для предыдущей версии или не работали должным образом, я придумал это.
Я потратил на это время?
Есть ли лучший способ?
private static void AddOpenApiVersion(OpenApiOptions options)
{
options.AddDocumentTransformer((document, context, cancellationToken) =>
{
document.Components ??= new OpenApiComponents();
document.Components.SecuritySchemes ??= new Dictionary();

var paths = context.DescriptionGroups.First(x => x.GroupName == context.DocumentName)
.Items;

foreach(var path in paths)
{
var hasAllowAnonymous = path.ActionDescriptor
.EndpointMetadata
.OfType()
.Any();

if(hasAllowAnonymous)
{
continue;
}

var documentPath = document.Paths.First(x => x.Key[1..] == path.RelativePath).Value;

var documentOperation = documentPath.Operations?.First(x => x.Key.Method == path.HttpMethod).Value;

if(documentOperation != null)
{
documentOperation.Security = [new OpenApiSecurityRequirement
{
{new OpenApiSecuritySchemeReference("bearer"), []}
}];
}
}

document.Components.SecuritySchemes.Add("bearer", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer"
});

document.SetReferenceHostDocument();

return Task.CompletedTask;
});
}

Вернуться в «C#»