11using Asp . Versioning ;
2+ using Microsoft . AspNetCore . Mvc . Abstractions ;
23using Microsoft . AspNetCore . Mvc . ApiExplorer ;
34using Microsoft . AspNetCore . Mvc . Controllers ;
45using Microsoft . Extensions . DependencyInjection ;
@@ -48,17 +49,15 @@ public void Configure(SwaggerGenOptions swaggerGenOptions)
4849 swaggerGenOptions . CustomOperationIds ( description => _operationIdSelector . OperationId ( description ) ) ;
4950 swaggerGenOptions . DocInclusionPredicate ( ( name , api ) =>
5051 {
51- if ( string . IsNullOrWhiteSpace ( api . GroupName ) )
52+ if ( api . ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor
53+ && controllerActionDescriptor . MethodInfo . HasMapToApiAttribute ( name ) )
5254 {
53- return false ;
55+ return true ;
5456 }
5557
56- if ( api . ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor )
57- {
58- return controllerActionDescriptor . MethodInfo . HasMapToApiAttribute ( name ) ;
59- }
60-
61- return false ;
58+ ApiVersionMetadata apiVersionMetadata = api . ActionDescriptor . GetApiVersionMetadata ( ) ;
59+ return apiVersionMetadata . Name == name
60+ || ( string . IsNullOrEmpty ( apiVersionMetadata . Name ) && name == DefaultApiConfiguration . ApiName ) ;
6261 } ) ;
6362 swaggerGenOptions . TagActionsBy ( api => new [ ] { api . GroupName } ) ;
6463 swaggerGenOptions . OrderActionsBy ( ActionOrderBy ) ;
@@ -70,5 +69,5 @@ public void Configure(SwaggerGenOptions swaggerGenOptions)
7069
7170 // see https://github.com/domaindrivendev/Swashbuckle.AspNetCore#change-operation-sort-order-eg-for-ui-sorting
7271 private static string ActionOrderBy ( ApiDescription apiDesc )
73- => $ "{ apiDesc . GroupName } _{ apiDesc . ActionDescriptor . AttributeRouteInfo ? . Template ?? apiDesc . ActionDescriptor . RouteValues [ "controller" ] } _{ apiDesc . ActionDescriptor . RouteValues [ "action" ] } _{ apiDesc . HttpMethod } ";
72+ => $ "{ apiDesc . GroupName } _{ apiDesc . ActionDescriptor . AttributeRouteInfo ? . Template ?? apiDesc . ActionDescriptor . RouteValues [ "controller" ] } _{ ( apiDesc . ActionDescriptor . RouteValues . TryGetValue ( "action" , out var action ) ? action : null ) } _{ apiDesc . HttpMethod } ";
7473}
0 commit comments