从 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”的主要内容,如果未能解决你的问题,请参考以下文章

从 Django REST Swagger 中排除 URL

如何从 ui-router 中的 url 地址中删除哈希标签 (#)

swagger注解详解

NelmioApiDoc v3 / Swagger - 多个 API 文档

Swagger 在 ASP.CORE 3 中为字典生成不正确的 URL

Swagger隐藏属性