You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:27:18