diff --git a/src/Umbraco.Cms.Api.Common/Configuration/ConfigureUmbracoSwaggerGenOptions.cs b/src/Umbraco.Cms.Api.Common/Configuration/ConfigureUmbracoSwaggerGenOptions.cs index 0128ef6ada..d569d0a6a5 100644 --- a/src/Umbraco.Cms.Api.Common/Configuration/ConfigureUmbracoSwaggerGenOptions.cs +++ b/src/Umbraco.Cms.Api.Common/Configuration/ConfigureUmbracoSwaggerGenOptions.cs @@ -1,4 +1,5 @@ using Asp.Versioning; +using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; @@ -48,17 +49,15 @@ public class ConfigureUmbracoSwaggerGenOptions : IConfigureOptions _operationIdSelector.OperationId(description)); swaggerGenOptions.DocInclusionPredicate((name, api) => { - if (string.IsNullOrWhiteSpace(api.GroupName)) + if (api.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor + && controllerActionDescriptor.MethodInfo.HasMapToApiAttribute(name)) { - return false; + return true; } - if (api.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) - { - return controllerActionDescriptor.MethodInfo.HasMapToApiAttribute(name); - } - - return false; + ApiVersionMetadata apiVersionMetadata = api.ActionDescriptor.GetApiVersionMetadata(); + return apiVersionMetadata.Name == name + || (string.IsNullOrEmpty(apiVersionMetadata.Name) && name == DefaultApiConfiguration.ApiName); }); swaggerGenOptions.TagActionsBy(api => new[] { api.GroupName }); swaggerGenOptions.OrderActionsBy(ActionOrderBy); @@ -70,5 +69,5 @@ public class ConfigureUmbracoSwaggerGenOptions : IConfigureOptions $"{apiDesc.GroupName}_{apiDesc.ActionDescriptor.AttributeRouteInfo?.Template ?? apiDesc.ActionDescriptor.RouteValues["controller"]}_{apiDesc.ActionDescriptor.RouteValues["action"]}_{apiDesc.HttpMethod}"; + => $"{apiDesc.GroupName}_{apiDesc.ActionDescriptor.AttributeRouteInfo?.Template ?? apiDesc.ActionDescriptor.RouteValues["controller"]}_{(apiDesc.ActionDescriptor.RouteValues.TryGetValue("action", out var action) ? action : null)}_{apiDesc.HttpMethod}"; } diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 2286142979..33f7a9d4e2 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -266,6 +266,7 @@ public static partial class UmbracoBuilderExtensions builder.Services.ConfigureOptions(); builder.Services.ConfigureOptions(); builder.Services.AddApiVersioning().AddApiExplorer(); + builder.Services.AddEndpointsApiExplorer(); builder.Services.ConfigureOptions(); builder.Services.ConfigureOptions(); builder.Services.TryAddEnumerable(ServiceDescriptor