如何在ASP.NET Core 6中以编程方式获取Swashbuckle/Swagger路由?
获取Swashbuckle Swagger的运行时路径
Swashbuckle注册的Swagger UI和swagger.json路径不在ASP.NET Core常规路由集合(也就是你用EndpointDataSource或IActionDescriptorCollectionProvider拿到的路由)里,因为它是通过自定义中间件处理的,不属于Controller/Action这类常规路由体系。要获取这些路径,直接读取Swashbuckle的配置选项即可:
方法1:获取Swagger UI的根路径
注入IOptions<SwaggerUIOptions>,它的RoutePrefix属性就是Swagger UI的访问路径(默认值为swagger):
// 在服务或控制器中注入依赖 private readonly IOptions<SwaggerUIOptions> _swaggerUiOpts; public YourClass(IOptions<SwaggerUIOptions> swaggerUiOpts) { _swaggerUiOpts = swaggerUiOpts; } public string GetSwaggerUiRootPath() { // 拼接成完整访问路径,比如"/swagger" return $"/{_swaggerUiOpts.Value.RoutePrefix}"; }
方法2:获取swagger.json的具体路径
如果需要获取接口文档JSON文件的路径,还要结合SwaggerOptions读取文档版本信息:
var swaggerOpts = app.Services.GetRequiredService<IOptions<SwaggerOptions>>().Value; var swaggerUiOpts = app.Services.GetRequiredService<IOptions<SwaggerUIOptions>>().Value; // 默认格式为 "/{RoutePrefix}/{文档版本}/swagger.json" var firstDocKey = swaggerOpts.SwaggerGeneratorOptions.SwaggerDocs.Keys.First(); string swaggerJsonPath = $"/{swaggerUiOpts.RoutePrefix}/{firstDocKey}/swagger.json";
补充说明
如果你在Program.cs里自定义过Swagger路径(比如app.UseSwaggerUI(c => c.RoutePrefix = "docs")),上面的代码会自动读取修改后的路径,不需要硬编码。
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

