開発中の Web API に後から Swashbuckle.AspNetCore を追加したはいいけど、いざ Swagger UI を表示してみたら「Failed to load API definition」というエラーになって API 一覧が見れない。こんな感じのやつ。
このエラーに遭遇したら、ググる前にまず swagger.json がちゃんと生成されているか確認すること。
今回の場合、/swagger/v1/swagger.json
にアクセスしてみたら、スキーマ ID が重複しているのが原因だとわかった。
スキーマ ID はデフォルトだとクラス名が使われるので、名前空間を含めたクラス名をスキーマ ID に使うように、Startup 内で指定したら解決。
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); // スキーマ ID は名前空間含めたクラス名にする c.CustomSchemaIds(type => type.FullName); });
何度もハマったので、忘れないようにメモを残して置く。