Open5

.NET 9で自動生成したOpenAPIドキュメントにスキーマが重複して生成される

けいけい

ASP.NET Coreで

builder.Services.AddOpenApi();
app.MapOpenApi();

を使って生成した
/openapi/v1.json
での問題。

同じクラスであるのにかかわらず重複してモデルが定義される。

"components": {
    "schemas": {
      "ApplicationUser": {
        "type": "object",
      },
      "ApplicationUser2": {
        "type": "object",
      },
      "ApplicationUser3": {
        "type": "object",
      },
      "ApplicationUser4": {
        "type": "object",
      },
    }
}
けいけい

回避策になるかと思ったが、手元の症状は改善しなかった。
ジェネリクスなListとかには効果ないのかも?

builder.Services.AddOpenApi(options =>
{
    options.AddSchemaTransformer((schema, context, cancellationToken) =>
    {
        if (schema.Properties is not null)
        {
            foreach (var property in schema.Properties)
            {
                if (schema.Required?.Contains(property.Key) != true)
                {
                    property.Value.Nullable = false;
                }
            }
        }
        return Task.CompletedTask;
    });
});

https://github.com/dotnet/aspnetcore/issues/58968#issuecomment-2498797322

けいけい

気付いた理由はopenapi-generator-cliを使ってみたくて

openapi-generator-cli generate -g typescript-fetch -i http://localhost:5046/openapi/v1.json

を実行したら以下のエラーが出たので。

[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined
[main] WARN  o.o.codegen.utils.ModelUtils - #/components/schemas/#/items is not defined