Swashbuckle.AspNetCore.Swaggerでswagger.jsonのRootPathを変更する

Swashbuckle.AspNetCore.Swaggerでswagger.jsonのRootPathを変更したい

表題の通りの欲求が発生するケースが、エンドポイントをサブディレクトリで分けて追加していくリアルワールドアプリケーションでは発生することがあります。 サブドメインを切ってくれればいいんですが、証明書の管理面倒だぞ!って話になったり、事情は色々です。

UsePathBaseを使ってのRootPathを指定することで、エンドポイント自体のRootPathは変更可能ですが、今度はSwagger.jsonのRootPathを変更する必要があります。

UseSwaggerのSwaggerOptionsのRouteTemplateの頭にサブディレクトリを付与する

個人的にSwashbuckleに関連するConfigureをまとめてるのは以下です。 github.com

UseSwaggerのSwaggerOptionsのRouteTemplateの頭にサブディレクトリを付与するコード例

github.com

app
    .UseSwagger(option => {
        if (swaggerSettings.RouteTemplateSettings.IsOverridable) {
            option.RouteTemplate = $"{swaggerSettings.RouteTemplateSettings.RouteTemplatePrefix}{option.RouteTemplate}";
        }

settingによって切り替えるコードにしているのでswaggerSettings.RouteTemplateSettings.IsOverridableの検査が入っていますが、option.RouteTemplateに、サブディレクトリを付与することで、swagger.jsonのRootPathを変更することが可能です。

次に

  • SwaggerUiのRootPath
  • SwaggerUiからrequestを投げるエンドポイントのRootPath(Swagger a.k.a. OpenApi的にはServersに関するSettings)

の設定を行っていきます。(続きます。)