Allow operation id selector to work for non-CMS API's (#15771)
* Allow OperationIdSelector to work for non CMS APIs https://github.com/umbraco/Umbraco-CMS/issues/15716 * Fixed condition to be more readable --------- Co-authored-by: Elitsa <elm@umbraco.dk>
This commit is contained in:
@@ -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<IOptions<UmbracoOperationIdSettings>>())
|
||||
{
|
||||
}
|
||||
|
||||
public OperationIdSelector(IOptions<UmbracoOperationIdSettings> 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;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
namespace Umbraco.Cms.Api.Common.OpenApi;
|
||||
|
||||
public class UmbracoOperationIdSettings
|
||||
{
|
||||
private HashSet<string> _nameSpacePrefixes = new HashSet<string>()
|
||||
{
|
||||
"Umbraco.Cms.Api"
|
||||
};
|
||||
|
||||
public IReadOnlySet<string> NameSpacePrefixes
|
||||
{
|
||||
get => _nameSpacePrefixes;
|
||||
}
|
||||
|
||||
public bool AddNameSpacePrefix(string prefix) => _nameSpacePrefixes.Add(prefix);
|
||||
}
|
||||
Reference in New Issue
Block a user