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

.NET 6 WebAPI如何配置Swagger去除访问路径中的index.html后缀

解决方案

你可以通过两种方案实现访问api/docs时路径无index.html后缀、无跳转直接加载页面:

方案1(推荐):内置URL重写中间件实现

通过内部转发规则处理请求,浏览器地址栏不会变化,实现成本极低,无需额外安装第三方依赖:

// 注意:重写中间件必须放在UseSwagger之前注册
app.UseRewriter(new RewriteOptions()
    .AddRewrite(@"^api/docs$", "api/docs/index.html", skipRemainingRules: true));

app.UseSwagger();
app.UseSwaggerUI(x =>
{
    x.SwaggerEndpoint("/swagger/v1/swagger.json", "API");
    x.RoutePrefix = "api/docs";
});

方案2:自定义端点直接返回Swagger页面

如果不想用重写中间件,可直接注册根路径端点返回Swagger的默认页面内容:

app.UseSwagger();
app.UseSwaggerUI(x =>
{
    x.SwaggerEndpoint("/swagger/v1/swagger.json", "API");
    x.RoutePrefix = "api/docs";
});

// 注册/api/docs根路径的处理端点
app.MapGet("/api/docs", async (HttpContext context) =>
{
    var swaggerUiOptions = context.RequestServices.GetRequiredService<IOptions<SwaggerUIOptions>>().Value;
    using var indexStream = swaggerUiOptions.IndexStream();
    using var streamReader = new StreamReader(indexStream);
    var htmlContent = await streamReader.ReadToEndAsync();
    context.Response.ContentType = "text/html";
    await context.Response.WriteAsync(htmlContent);
});

配置验证

启动项目后直接访问api/docs,地址栏不会出现/index.html后缀,也不会有跳转过程,直接加载Swagger接口文档页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:10