【问题标题】:Swashbuckle.AspNetCore - Is there a way to set the path to swagger.json dynamically?Swashbuckle.AspNetCore - 有没有办法动态设置 swagger.json 的路径?
【发布时间】:2023-04-05 14:15:01
【问题描述】:

我需要在 Azure 应用程序网关后面的多个 url 托管一个服务。 该服务将在http://10.11.12.13:1234 内部托管,并且只有一个相同的实例。 这需要通过公共 URL 公开,例如: - foo.example.com/service1 - bar.example.com/service1 等

我们可以配置应用程序网关来重写进入的 url 以指向托管服务。像 example.com/service1 => 10.11.12.13:1234

问题是swagger文件的路径是在Startup.cs中设置的:

options.SwaggerEndpoint("/swagger/api/swagger.json", "My API");

此时没有可用的 HttpRequest,因此我无法读取标头并进行适当配置,这就是我们使用 PreSerializeFilters 所做的,以在返回的 swagger.json 中设置 basePath。

当前,当用户导航到https://foo.example.com/service1/swagger 时,swagger UI 将尝试从错误位置的https://foo.example.com/swagger/api/swagger.json 下拉 swagger.json。

它应该来自https://foo.example.com/service1/swagger/api/swagger.json。

有什么类似于PreSerializeFilters 的方法可以设置 swagger.json 本身的路径吗?

【问题讨论】:

  • 并且设置相对 url 而不是绝对 URL 不起作用?
  • 令人惊讶的是,最简单的解决方案往往是正确的解决方案 - 我没有只见树木不见森林,谢谢。我似乎没有将您的答案标记为已接受的选项,但它确实解决了问题

标签: asp.net-core swagger swagger-ui swashbuckle


【解决方案1】:

问题是swagger文件的路径是在Startup.cs中设置的:

options.SwaggerEndpoint("/swagger/api/swagger.json", "My API");

设置一个相对 url 而不是绝对的。

 options.SwaggerEndpoint("swagger/api/swagger.json", "My API");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2023-03-27
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    相关资源
    最近更新 更多