从 Swagger URL 隐藏“index.html”
Posted
技术标签:
【中文标题】从 Swagger URL 隐藏“index.html”【英文标题】:Hide "index.html" from Swagger URL 【发布时间】:2021-11-19 19:23:17 【问题描述】:我使用的是 .NET 6 (.NET Core WebAPI)。从模板创建了一个简单的项目。 VS 创建 WeatherForecastController 并配置 Swagger。
Swagger 在“api/docs/index.html”上运行
当我点击“api/docs”时,它会重定向到“api/docs/index.html”。有没有办法从路径中删除“/index.html”?这是我的 Swagger 配置:
app.UseSwagger();
app.UseSwaggerUI(x =>
x.SwaggerEndpoint("/swagger/v1/swagger.json", "API");
x.RoutePrefix = "api/docs";
);
【问题讨论】:
AFAIK,你需要使用反向代理来完全重写URL 是的,我可以继续重写 URL,但我认为这个功能会与 Swagger @>@ 【参考方案1】:重定向到index.html
是硬编码在SwaggerUIMiddleware
中的,您无法对其进行配置。
除非您用自己的中间件替换中间件,否则无法将其关闭。
https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/67344fe0b7c7e78128159d8bf02ebfe91408c3da/src/Swashbuckle.AspNetCore.SwaggerUI/SwaggerUIMiddleware.cs#L62-L74
public async Task Invoke(HttpContext httpContext)
var httpMethod = httpContext.Request.Method;
var path = httpContext.Request.Path.Value;
// If the RoutePrefix is requested (with or without trailing slash), redirect to index URL
if (httpMethod == "GET" && Regex.IsMatch(path, $"^/?Regex.Escape(_options.RoutePrefix)/?$", RegexOptions.IgnoreCase))
// Use relative redirect to support proxy environments
var relativeIndexUrl = string.IsNullOrEmpty(path) || path.EndsWith("/")
? "index.html"
: $"path.Split('/').Last()/index.html";
RespondWithRedirect(httpContext.Response, relativeIndexUrl);
return;
if (httpMethod == "GET" && Regex.IsMatch(path, $"^/Regex.Escape(_options.RoutePrefix)/?index.html$", RegexOptions.IgnoreCase))
await RespondWithIndexHtml(httpContext.Response);
return;
await _staticFileMiddleware.Invoke(httpContext);
【讨论】:
以上是关于从 Swagger URL 隐藏“index.html”的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ui-router 中的 url 地址中删除哈希标签 (#)
NelmioApiDoc v3 / Swagger - 多个 API 文档