【发布时间】: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