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

.NET Core 6中如何在Program.cs获取Swagger显示的swagger.json地址

.NET Core 6中在Program.cs访问Swagger JSON地址的方法

你已经完成Swagger的常规配置(builder.Services.AddSwaggerGen、app.UseSwagger、app.UseSwaggerUI),Swagger页面正常显示,下面提供两种在Program.cs中获取Swagger JSON地址/内容的方案,用于展示额外信息:

方案1:直接构造Swagger JSON的完整地址

Swagger默认的JSON文档路由为/swagger/{documentName}/swagger.json,其中documentName默认是v1(可在AddSwaggerGen配置中修改)。如果需要获取完整的绝对地址,可以通过请求上下文动态拼接:

// 在注册中间件时获取请求上下文,构造完整地址
app.Use(async (context, next) =>
{
    // 拼接当前请求环境下的swagger.json绝对地址
    var swaggerJsonFullUrl = $"{context.Request.Scheme}://{context.Request.Host}/swagger/v1/swagger.json";
    
    // 这里可将该地址用于后续逻辑,比如传递给SwaggerUI的自定义内容
    await next();
});

如果你的Swagger配置了自定义路由前缀(比如把Swagger挂载到/docs路径下),需要对应修改拼接的路由部分:

var swaggerJsonFullUrl = $"{context.Request.Scheme}://{context.Request.Host}/docs/v1/swagger.json";

方案2:直接获取Swagger文档内容(无需HTTP请求)

如果你的需求是读取Swagger JSON的内容而非访问URL,推荐直接用Swagger内置的ISwaggerProvider服务生成文档对象,避免额外的HTTP请求开销:

// 先构建应用程序
var app = builder.Build();

// 创建服务作用域获取ISwaggerProvider
using (var scope = app.Services.CreateScope())
{
    var swaggerProvider = scope.ServiceProvider.GetRequiredService<ISwaggerProvider>();
    // 获取指定文档名称的Swagger文档对象(默认是v1)
    var swaggerDoc = swaggerProvider.GetSwagger("v1");
    
    // 示例:用文档中的接口数量生成额外信息,展示在SwaggerUI上
    var extraInfo = $"当前API共包含 {swaggerDoc.Paths.Count} 个接口";
    
    // 后续将extraInfo传递给SwaggerUI的配置
    app.UseSwaggerUI(options =>
    {
        options.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
        // 在SwaggerUI头部添加自定义额外信息
        options.HeadContent = $"<div style='padding:10px; background:#f5f5f5;'>{extraInfo}</div>";
    });
}

// 其他中间件配置...
app.UseSwagger();
app.UseAuthorization();
// ...

注意事项

  • 如果修改过Swagger的文档名称(比如AddSwaggerGen(c => c.SwaggerDoc("v2", ...))),要将GetSwagger和SwaggerEndpoint中的文档名称对应修改。
  • 若要在UseSwaggerUI中直接使用swaggerDoc的信息,需要保证服务作用域的创建顺序在UseSwaggerUI之前。

内容的提问来源于stack exchange,提问作者Michael EstrinOne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:14