.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
相关产品推荐
相关产品推荐

