使用Swashbuckle Aspnetcore将`host`,`basePath`和`schemes`添加到swagger.json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Swashbuckle Aspnetcore将`host`,`basePath`和`schemes`添加到swagger.json相关的知识,希望对你有一定的参考价值。

我正在使用官方文档逐步方法来配置Swagger UI并在我的ASP.NET核心API应用程序中生成Swagger JSON文件。

Get started with Swashbuckle and ASP.NET Core

如果我查看我生成的swagger.json文件 - 它缺少三个重要属性hostbasePathschemes

请帮助我理解我可以添加哪些代码,以便生成的swagger.json将具有以下提到的属性/值。

这是一个理想的swagger.json - 如果我按照我的应用程序中的文档代码注意hostbasePathschemes

{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "Demo API Title"
  },
  "host": "some-url-that-is-hosted-on-azure.azurewebsites.net",
  "basePath": "/api",
  "schemes": ["https"],
  "paths": {
    "/Account/Test": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Account test method - POST",
        "operationId": "AccountTest",
        "consumes": [],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "boolean"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "NumberSearchResult": {
      "type": "object",
      "properties": {
        "number": {
          "type": "string"
        },
        "location": {
          "type": "string"
        }
      }
    }
  },
  "securityDefinitions": {
    "Bearer": {
      "name": "Authorization",
      "in": "header",
      "type": "apiKey",
      "description": "Authorization. Example: "Authorization: Bearer {token}""
    }
  },
  "security": [
    {
      "Bearer": []
    }
  ]
}
答案

您可以实现并注册自己的IDocumentFilter并在那里设置所需的值。

public class MyDocumentFilter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
    {
        swaggerDoc.Host = "some-url-that-is-hosted-on-azure.azurewebsites.net";
        swaggerDoc.BasePath = "/api";
        swaggerDoc.Schemes = new List<string> { "https" };
    }
}

然后通过注册

services.AddSwaggerGen(options =>
{
    options.DocumentFilter<MyDocumentFilter>();
});

以上是关于使用Swashbuckle Aspnetcore将`host`,`basePath`和`schemes`添加到swagger.json的主要内容,如果未能解决你的问题,请参考以下文章

使用Swashbuckle Aspnetcore将`host`,`basePath`和`schemes`添加到swagger.json

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

Swashbuckle.AspNetCore3.0的二次封装与使用

使用Swashbuckle.AspNetCore生成.NetCore WEBAPI的接口文档

TS6053 构建 Swashbuckle.AspNetCore

Swashbuckle.AspNetCore.SwaggerGen 版本 5.6.X 没有 IDataContractResolver