diff --git a/src/Umbraco.Cms.Api.Common/OpenApi/OperationIdSelector.cs b/src/Umbraco.Cms.Api.Common/OpenApi/OperationIdSelector.cs index aa3bbfc699..908c8c8a92 100644 --- a/src/Umbraco.Cms.Api.Common/OpenApi/OperationIdSelector.cs +++ b/src/Umbraco.Cms.Api.Common/OpenApi/OperationIdSelector.cs @@ -1,16 +1,36 @@ using Asp.Versioning; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Extensions; namespace Umbraco.Cms.Api.Common.OpenApi; public class OperationIdSelector : IOperationIdSelector { + private readonly UmbracoOperationIdSettings _umbracoOperationIdSettings; + + [Obsolete("Use non obsolete constructor")] + public OperationIdSelector() : this(StaticServiceProvider.Instance.GetRequiredService>()) + { + } + + public OperationIdSelector(IOptions umbracoOperationIdSettings) + { + _umbracoOperationIdSettings = umbracoOperationIdSettings.Value; + } + public virtual string? OperationId(ApiDescription apiDescription, ApiVersioningOptions apiVersioningOptions) { - if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor - || controllerActionDescriptor.ControllerTypeInfo.Namespace?.StartsWith("Umbraco.Cms.Api") is not true) + if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor) + { + return null; + } + + var controllerTypeInfoNamespace = controllerActionDescriptor.ControllerTypeInfo.Namespace; + if (controllerTypeInfoNamespace is not null && _umbracoOperationIdSettings.NameSpacePrefixes.Any(prefix => controllerTypeInfoNamespace.StartsWith(prefix)) is false) { return null; } diff --git a/src/Umbraco.Cms.Api.Common/OpenApi/UmbracoOperationIdSettings.cs b/src/Umbraco.Cms.Api.Common/OpenApi/UmbracoOperationIdSettings.cs new file mode 100644 index 0000000000..6b7ee622a0 --- /dev/null +++ b/src/Umbraco.Cms.Api.Common/OpenApi/UmbracoOperationIdSettings.cs @@ -0,0 +1,16 @@ +namespace Umbraco.Cms.Api.Common.OpenApi; + +public class UmbracoOperationIdSettings +{ + private HashSet _nameSpacePrefixes = new HashSet() + { + "Umbraco.Cms.Api" + }; + + public IReadOnlySet NameSpacePrefixes + { + get => _nameSpacePrefixes; + } + + public bool AddNameSpacePrefix(string prefix) => _nameSpacePrefixes.Add(prefix); +}