Repository navigation
InvalidOperationException when create schema on transformer #1227
Copy link
Copy link
Open
Labels
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the bug
Microsoft open api will throw InvalidOperationException when create schema on transformer.
Asp.Versioning.OpenApi 10.2.3
Expected Behavior
Creation schema works.
Steps To Reproduce
just run:
using Asp.Versioning;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.OpenApi;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddApiVersioning(static options =>
{
options.DefaultApiVersion = new ApiVersion(1, 0);
options.ApiVersionReader = ApiVersionReader.Combine(
new QueryStringApiVersionReader(),
new HeaderApiVersionReader() { HeaderNames = { "x-api-version" } });
})
.AddApiExplorer(static options =>
{
options.GroupNameFormat = "'v'VVV";
options.AssumeDefaultVersionWhenUnspecified = true;
})
.AddOpenApi(static options =>
{
var apiOptions = options.Document;
apiOptions.AddOperationTransformer<AddSchemaBugOperationTransformer>();
});
var app = builder.Build();
app.MapOpenApi().WithDocumentPerVersion();
var versionedApi = app.NewVersionedApi();
versionedApi.MapGet("/v1", () => "Hello from File-Based Web App! v1").HasApiVersion(new ApiVersion(1, 0));
versionedApi.MapGet("/v2", () => "Hello from File-Based Web App! v2").HasApiVersion(new ApiVersion(2, 0));
await app.RunAsync();
public class AddSchemaBugOperationTransformer : IOpenApiOperationTransformer
{
public async Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransformerContext context, CancellationToken cancellationToken)
{
var schema = await context.GetOrCreateSchemaAsync(typeof(Model), cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
public class Model
{
public string Name { get; set; }
}
Exceptions (if any)
在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ThrowHelper.ThrowInvalidOperationException_NoKeyedServiceRegistered(Type serviceType, Type keyType)
在 Microsoft.Extensions.DependencyInjection.ServiceProvider.GetRequiredKeyedService(Type serviceType, Object serviceKey, ServiceProviderEngineScope serviceProviderEngineScope)
在 Microsoft.Extensions.DependencyInjection.ServiceProviderKeyedServiceExtensions.GetRequiredKeyedService[T](IServiceProvider provider, Object serviceKey)
在 Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.GetOrCreateSchemaAsync(Type type, ApiParameterDescription parameterDescription, CancellationToken cancellationToken)
在 AddSchemaBugOperationTransformer.<TransformAsync>d__0.MoveNext() 在 D:\FileCSharp\VerApiBug\BugMin\BugMin.cs 中: 第 51 行
在 Microsoft.AspNetCore.OpenApi.OpenApiDocumentService.<GetOperationsAsync>d__21.MoveNext()
在 Microsoft.AspNetCore.OpenApi.OpenApiDocumentService.<GetOpenApiPathsAsync>d__20.MoveNext()
在 Microsoft.AspNetCore.OpenApi.OpenApiDocumentService.<GetOpenApiDocumentAsync>d__12.MoveNext()
在 Microsoft.Extensions.ApiDescriptions.OpenApiDocumentProvider.<GenerateAsync>d__3.MoveNext()
在 Microsoft.Extensions.ApiDescriptions.OpenApiDocumentProvider.<GenerateAsync>d__2.MoveNext()
在 Microsoft.WebTools.ApiEndpointDiscovery.OpenApiDocumentGenerator.<WriteOpenApiDocumentAsync>d__16.MoveNext()
在 Microsoft.WebTools.ApiEndpointDiscovery.OpenApiDocumentGenerator.<GenerateOpenApiDocumentsAsync>d__15.MoveNext()
.NET Version
10.0.401
Anything else?
No response
Reactions are currently unavailable
Activity
achikhv commentedon Oct 15, 2026
Same exception when GetOrCreateSchemaAsync is called from wihtin DocumentTransformer.
I can reproduce it with this minimal example
System.InvalidOperationException
$>b__0_2>d.MoveNext() in C:\Users\chichkov\source\repos\WebApplication1\WebApplication1\Program.cs:line 15HResult=0x80131509
Message=No keyed service for type 'Microsoft.AspNetCore.OpenApi.OpenApiSchemaService' using key type 'System.String' has been registered.
Source=Microsoft.Extensions.DependencyInjection
StackTrace:
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ThrowHelper.ThrowInvalidOperationException_NoKeyedServiceRegistered(Type serviceType, Type keyType)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetRequiredKeyedService(Type serviceType, Object serviceKey, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderKeyedServiceExtensions.GetRequiredKeyedService[T](IServiceProvider provider, Object serviceKey)
at Microsoft.AspNetCore.OpenApi.OpenApiDocumentTransformerContext.GetOrCreateSchemaAsync(Type type, ApiParameterDescription parameterDescription, CancellationToken cancellationToken)
at Program.<>c.<<
at Microsoft.AspNetCore.OpenApi.DelegateOpenApiDocumentTransformer.d__4.MoveNext()
at Microsoft.AspNetCore.OpenApi.OpenApiDocumentService.d__13.MoveNext()
at Microsoft.AspNetCore.OpenApi.OpenApiDocumentService.d__12.MoveNext()