在 ASP.NET 核心中以编程方式获取 Swagger URL
Get Swagger URL programmatically in ASP.NET Core
我正在使用 ASP.NET Core 5 和 Swagger。我知道如何使用 Swagger,它工作正常。
Swagger 在 foo:5001/swagger
上提供 - 但我需要在运行时以编程方式确定 URL。
我该怎么做?
我已经试过了:
将它 by injecting IEnumerable<EndpointDataSource>
变成一些 helper/controller class,但它显示了除 swagger 之外的所有路线。
在 setting up 端点路由和检查 IEndpointRouteBuilder
时获取它,但它再次向我显示了除 swagger 之外的所有路由。
根据 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/SwaggerUIMiddleware.cs 的消息来源,您可以使用 class SwaggerUIOptions
:
的实例
- 在 DI 容器中注册实例:
var options = new SwaggerUIOptions
{
RoutePrefix = "swagger"
};
options.SwaggerEndpoint("/swagger/v1/swagger.json", "waiting_list v1");
services.AddSingleton(options);
- 使用配置实例:
app.UseSwaggerUI(app.ApplicationServices.GetRequiredService<SwaggerUIOptions>());
- 将实例注入任何 controller/class:
public WeatherForecastController(ILogger<WeatherForecastController> logger, SwaggerUIOptions swaggerOptions)
{
}
属性 RoutePrefix
包含 swagger 前缀(不带前导 '/')
这个想法只有在选项对象传递给 UseSwaggerUI
方法时才有效(自 6.0.0 版起可用)。如果 UseSwaggerUI
使用回调调用(如 UseSwaggerUI(a => { a.RoutePrefix = string.Empty; })
),它将不起作用。
我正在使用 ASP.NET Core 5 和 Swagger。我知道如何使用 Swagger,它工作正常。
Swagger 在 foo:5001/swagger
上提供 - 但我需要在运行时以编程方式确定 URL。
我该怎么做?
我已经试过了:
将它 by injecting
IEnumerable<EndpointDataSource>
变成一些 helper/controller class,但它显示了除 swagger 之外的所有路线。在 setting up 端点路由和检查
IEndpointRouteBuilder
时获取它,但它再次向我显示了除 swagger 之外的所有路由。
根据 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/SwaggerUIMiddleware.cs 的消息来源,您可以使用 class SwaggerUIOptions
:
- 在 DI 容器中注册实例:
var options = new SwaggerUIOptions
{
RoutePrefix = "swagger"
};
options.SwaggerEndpoint("/swagger/v1/swagger.json", "waiting_list v1");
services.AddSingleton(options);
- 使用配置实例:
app.UseSwaggerUI(app.ApplicationServices.GetRequiredService<SwaggerUIOptions>());
- 将实例注入任何 controller/class:
public WeatherForecastController(ILogger<WeatherForecastController> logger, SwaggerUIOptions swaggerOptions)
{
}
属性 RoutePrefix
包含 swagger 前缀(不带前导 '/')
这个想法只有在选项对象传递给 UseSwaggerUI
方法时才有效(自 6.0.0 版起可用)。如果 UseSwaggerUI
使用回调调用(如 UseSwaggerUI(a => { a.RoutePrefix = string.Empty; })
),它将不起作用。