用于 Swagger 文档的 UsePathBase 和 Swashbuckle

UsePathBase and Swashbuckle for Swagger Documentation

我已经使用中间件 UsePathBase("/api/something/else") 设置了我的 ASP.NET 核心,我的控制器定义如下:

[ApiController]
[Route("/[controller]")]
public class WeatherForecastController : ControllerBase

具体端点是这样定义的

[HttpGet]
public async Task<IEnumerable<ForecastRecord>> Get()

当我 运行 应用程序时,我可以像这样访问端点:

/WeatherForecast
/api/something/else/WeatherForecast

当我得到 Swagger 文档时,我得到了这个:

"servers": [
    {
      "url": "/api/something/else"
    }
  ],
  "paths": {
    "/WeatherForecast": {
      "get": {
        "tags": [
          "WeatherForecast"
        ],

如您所见,servers 元素有一个 /api/something/else 条目,但是当我 运行 SwaggerUI 时,我没有看到前缀为 /api/something/else 的端点:

我想知道是否有办法强制 SwaggerUI 为端点添加前缀 UsePathBase

在这里和那里玩中间件调用的顺序后,我找到了解决这个问题中描述的问题的正确组合是:

//1. Add SwaggerUI
app.UseSwaggerUI(c =>
{
  c.RoutePrefix = "api/something/else";
  c.SwaggerEndpoint("swagger/v1/swagger.json", "Name");
});

//2. Set BasePath
app.UsePathBase("/api/something/else");

//3. Add Swagger
app.UseSwagger();

按照该命令,Swagger UI 将正确显示端点: