From 0b390ed54c8ad0c12b46c4add29d83fd4f4f7a4a Mon Sep 17 00:00:00 2001 From: TuTiDore Date: Sun, 21 Dec 2025 21:50:49 -0800 Subject: [PATCH] fix: dotnet 10 openapi --- Common/OpenAPI/OpenApiExtensions.cs | 30 ++++++++++++++++++----------- Common/OpenShockMiddlewareHelper.cs | 6 +++--- Common/OpenShockServiceHelper.cs | 10 ++++++---- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/Common/OpenAPI/OpenApiExtensions.cs b/Common/OpenAPI/OpenApiExtensions.cs index bed9be8b..d761e5b5 100644 --- a/Common/OpenAPI/OpenApiExtensions.cs +++ b/Common/OpenAPI/OpenApiExtensions.cs @@ -1,4 +1,5 @@ -using Microsoft.OpenApi; +using Asp.Versioning.ApiExplorer; +using Microsoft.OpenApi; namespace OpenShock.Common.OpenAPI; @@ -16,16 +17,23 @@ public static IServiceCollection AddOpenApiExt(this WebApplicationBuil { options.AddPolicy("OpenAPI", policy => policy.Expire(TimeSpan.FromMinutes(10))); }); - builder.Services.AddOpenApi(options => - { - options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1; - options.AddDocumentTransformer(DocumentDefaults.GetDocumentTransformer(version: "1")); - }); - builder.Services.AddOpenApi("v2", options => + + using (var tempProvider = builder.Services.BuildServiceProvider()) { - options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1; - options.AddDocumentTransformer(DocumentDefaults.GetDocumentTransformer(version: "2")); - }); + var apiVersionProvider = tempProvider.GetRequiredService(); + + // Configure OpenAPI for each API version + foreach (var description in apiVersionProvider.ApiVersionDescriptions) + { + builder.Services.AddOpenApi(description.GroupName, options => + { + options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1; + options.AddDocumentTransformer(DocumentDefaults.GetDocumentTransformer( + version: description.ApiVersion.ToString())); + }); + } + } + builder.Services.AddOpenApi("oauth", options => { options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1; @@ -38,7 +46,7 @@ public static IServiceCollection AddOpenApiExt(this WebApplicationBuil options.ShouldInclude = apiDescription => apiDescription.GroupName is "admin"; options.AddDocumentTransformer(DocumentDefaults.GetDocumentTransformer(version: "1")); }); - + return builder.Services; } } \ No newline at end of file diff --git a/Common/OpenShockMiddlewareHelper.cs b/Common/OpenShockMiddlewareHelper.cs index 85b6299e..2a9b0e23 100644 --- a/Common/OpenShockMiddlewareHelper.cs +++ b/Common/OpenShockMiddlewareHelper.cs @@ -84,9 +84,9 @@ public static async Task UseCommonOpenShockMiddleware(this app.MapScalarApiReference("/scalar/viewer", options => options - .WithOpenApiRoutePattern("/swagger/{documentName}/swagger.json") - .AddDocument("1", "Version 1") - .AddDocument("2", "Version 2") + .WithOpenApiRoutePattern("/openapi/{documentName}.json") + .AddDocument("v1", "Version 1") + .AddDocument("v2", "Version 2") ); app.MapControllers(); diff --git a/Common/OpenShockServiceHelper.cs b/Common/OpenShockServiceHelper.cs index 7e91e8b8..a3ef8f1f 100644 --- a/Common/OpenShockServiceHelper.cs +++ b/Common/OpenShockServiceHelper.cs @@ -143,11 +143,13 @@ public static IServiceCollection AddOpenShockServices(this IServiceCollection se { options.DefaultApiVersion = new ApiVersion(1, 0); options.AssumeDefaultVersionWhenUnspecified = true; - }); - - apiVersioningBuilder.AddApiExplorer(setup => + options.ReportApiVersions = true; + options.ApiVersionReader = new UrlSegmentApiVersionReader(); + }) + .AddMvc() // mvc required for ApiExplorer + .AddApiExplorer(setup => { - setup.GroupNameFormat = "VVV"; + setup.GroupNameFormat = "'v'V"; setup.SubstituteApiVersionInUrl = true; setup.DefaultApiVersion = new ApiVersion(1, 0); setup.AssumeDefaultVersionWhenUnspecified = true;