Skip to content

Commit f200ce5

Browse files
committed
Add support for transformer-based WithOpenApi implementation
1 parent eafaa76 commit f200ce5

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

src/OpenApi/src/Extensions/OpenApiEndpointConventionBuilderExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ public static TBuilder WithOpenApi<TBuilder>(this TBuilder builder, Func<OpenApi
5858
return builder;
5959
}
6060

61+
public static TBuilder WithOpenApiTransformer<TBuilder>(this TBuilder builder, Func<OpenApiOperation, OpenApiOperationTransformerContext, CancellationToken, Task> transformer) where TBuilder : IEndpointConventionBuilder
62+
{
63+
builder.WithMetadata(new DelegateOpenApiOperationTransformer(transformer));
64+
return builder;
65+
}
66+
6167
[RequiresDynamicCode(TrimWarningMessage)]
6268
[RequiresUnreferencedCode(TrimWarningMessage)]
6369
private static void AddAndConfigureOperationForEndpoint(EndpointBuilder endpointBuilder, Func<OpenApiOperation, OpenApiOperation>? configure = null)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
#nullable enable
2+
static Microsoft.AspNetCore.Builder.OpenApiEndpointConventionBuilderExtensions.WithOperationTransformer<TBuilder>(this TBuilder builder, System.Func<Microsoft.OpenApi.Models.OpenApiOperation!, Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext!, System.Threading.CancellationToken, System.Threading.Tasks.Task!>! transformer) -> TBuilder

src/OpenApi/src/Services/OpenApiDocumentService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,14 @@ private async Task<Dictionary<OperationType, OpenApiOperation>> GetOperationsAsy
262262
var transformer = operationTransformers[i];
263263
await transformer.TransformAsync(operation, operationContext, cancellationToken);
264264
}
265+
266+
var endpointOperationTransformer = description.ActionDescriptor.EndpointMetadata
267+
.OfType<DelegateOpenApiOperationTransformer>()
268+
.LastOrDefault();
269+
if (endpointOperationTransformer is not null)
270+
{
271+
await endpointOperationTransformer.TransformAsync(operation, operationContext, cancellationToken);
272+
}
265273
}
266274
return operations;
267275
}

0 commit comments

Comments
 (0)