Skip to content

Commit 49330b4

Browse files
authored
Support minimal APIs in OpenAPI spec and Swagger UI (#17622)
1 parent 1c859e7 commit 49330b4

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

src/Umbraco.Cms.Api.Common/Configuration/ConfigureUmbracoSwaggerGenOptions.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Mvc.Abstractions;
23
using Microsoft.AspNetCore.Mvc.ApiExplorer;
34
using Microsoft.AspNetCore.Mvc.Controllers;
45
using 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
}

src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ public static IUmbracoBuilder AddWebComponents(this IUmbracoBuilder builder)
266266
builder.Services.ConfigureOptions<ConfigureApiVersioningOptions>();
267267
builder.Services.ConfigureOptions<ConfigureApiExplorerOptions>();
268268
builder.Services.AddApiVersioning().AddApiExplorer();
269+
builder.Services.AddEndpointsApiExplorer();
269270
builder.Services.ConfigureOptions<UmbracoMvcConfigureOptions>();
270271
builder.Services.ConfigureOptions<UmbracoRequestLocalizationOptions>();
271272
builder.Services.TryAddEnumerable(ServiceDescriptor

0 commit comments

Comments
 (0)