在 ASP.NET 核心中以编程方式获取 Swagger URL

Get Swagger URL programmatically in ASP.NET Core

我正在使用 ASP.NET Core 5 和 Swagger。我知道如何使用 Swagger,它工作正常

Swagger 在 foo:5001/swagger 上提供 - 但我需要在运行时以编程方式确定 URL。

我该怎么做?


我已经试过了:

  1. 将它 by injecting IEnumerable<EndpointDataSource> 变成一些 helper/controller class,但它显示了除 swagger 之外的所有路线。

  2. setting up 端点路由和检查 IEndpointRouteBuilder 时获取它,但它再次向我显示了除 swagger 之外的所有路由。

根据 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/SwaggerUIMiddleware.cs 的消息来源,您可以使用 class SwaggerUIOptions:

的实例
  1. 在 DI 容器中注册实例:
var options = new SwaggerUIOptions 
{
    RoutePrefix = "swagger"
};
options.SwaggerEndpoint("/swagger/v1/swagger.json", "waiting_list v1");
services.AddSingleton(options);
  1. 使用配置实例:
app.UseSwaggerUI(app.ApplicationServices.GetRequiredService<SwaggerUIOptions>());
  1. 将实例注入任何 controller/class:
public WeatherForecastController(ILogger<WeatherForecastController> logger, SwaggerUIOptions swaggerOptions)
{
}

属性 RoutePrefix 包含 swagger 前缀(不带前导 '/')

这个想法只有在选项对象传递给 UseSwaggerUI 方法时才有效(自 6.0.0 版起可用)。如果 UseSwaggerUI 使用回调调用(如 UseSwaggerUI(a => { a.RoutePrefix = string.Empty; })),它将不起作用。