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

ASP.NET Core 6中如何配置SwaggerUi3添加URL前缀?

给NSwag SwaggerUI3添加URL前缀配置(ASP.NET Core 6 + NSwag.AspNetCore v13.20.0)

需求说明

使用ASP.NET Core 6和NSwag.AspNetCore v13.20.0,需要将SwaggerUI的默认访问URL从https://url/swagger/index.html改为https://url/prefix/swagger/index.html,在Swagger前添加自定义前缀,且UseSwaggerUi已过时,需使用UseSwaggerUi3。

解决方案

需要同时配置Swagger文档的生成路径和SwaggerUI的路由前缀,具体修改如下:

1. 修改ConfigureServices中的Swagger文档配置

在AddSwaggerDocument中指定swagger元数据文件的路径,并设置文档标识名:

services.AddSwaggerDocument(settings =>
{
    settings.Title = "xxx Api";
    // 设置文档唯一标识,用于后续UI关联
    settings.DocumentName = "v1";
    // 配置swagger json文件的访问路径,带上自定义前缀
    settings.Path = "/prefix/swagger/v1/swagger.json";
});

2. 修改Configure中的中间件配置

调整UseOpenApi和UseSwaggerUi3的参数,确保路径与上述配置一致:

// 配置OpenApi中间件的路径,匹配Swagger文档的生成路径
app.UseOpenApi(options =>
{
    options.Path = "/prefix/swagger/v1/swagger.json";
});

// 配置SwaggerUI3的路由前缀和文档源
app.UseSwaggerUi3(options =>
{
    // 设置UI的路由前缀,访问入口变为/prefix/swagger/index.html
    options.RoutePrefix = "prefix/swagger";
    // 添加要加载的swagger文档路由,关联之前设置的文档标识和路径
    options.SwaggerRoutes.Add(new SwaggerUiRoute("v1", "/prefix/swagger/v1/swagger.json"));
});

修改后的完整代码

ConfigureServices完整代码

public void ConfigureServices(IServiceCollection services)
{
    _logger.Info("ConfigureServices starting...");

    try
    {
        services.AddControllers(x =>
        {
            x.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
        })
        .AddNewtonsoftJson(x =>
        {
            x.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects;
        });

        services.AddTypeSignatureSHA256();

        services.AddHttpClient(nameof(HttpClient)).AddPolicyHandler(GetHttpRetryPolicy());

        services.Configure<IISServerOptions>(options => options.AutomaticAuthentication = false);

        services.AddSwaggerDocument(settings =>
        {
            settings.Title = "xxx Api";
            settings.DocumentName = "v1";
            settings.Path = "/prefix/swagger/v1/swagger.json";
        });
        
        _logger.Info("ConfigureServices ended");
    }
    catch (Exception ex)
    {
        _logger.Error(ex, string.Empty);
        throw;
    }
}

Configure完整代码

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifeTime)
{
    _logger.Info("Configure starting...");

    try
    {
        RegisterApplicationShutdown(appLifeTime);

        if (env.IsDevelopment())
            app.UseDeveloperExceptionPage();

        app.UseRouting();

        app.UseMiddleware<ExceptionsMiddleware>();
        app.UseMiddleware<HealthChecksUIMiddleware>();
        app.UseAppMetricsPrometheus(new AppMetricsPrometheusSettings { UseSystemUsageCollector = true });
        app.UseMiddleware<AppMetricsRequestsMiddleware>();
        app.UseMiddleware<RequestLoggingMiddleware>();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

        app.UseOpenApi(options =>
        {
            options.Path = "/prefix/swagger/v1/swagger.json";
        });

        app.UseSwaggerUi3(options =>
        {
            options.RoutePrefix = "prefix/swagger";
            options.SwaggerRoutes.Add(new SwaggerUiRoute("v1", "/prefix/swagger/v1/swagger.json"));
        });

        _logger.Info("Configure ended");
    }
    catch (Exception ex)
    {
        _logger.Error(ex, string.Empty);
        throw;
    }
}

验证

配置完成后,访问https://yourdomain/prefix/swagger/index.html即可打开SwaggerUI页面,页面会自动加载https://yourdomain/prefix/swagger/v1/swagger.json中的接口文档。

内容的提问来源于stack exchange,提问作者CHARIS MEGALOS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:23:24