首页 > 解决方案 > Swashbuckle.AspNetCore - 有没有办法动态设置 swagger.json 的路径?

问题描述

我需要在 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", "我的 API");

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

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

它应该从https://foo.example.com/service1/swagger/api/swagger.json.

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

标签: asp.net-coreswaggerswagger-uiswashbuckle

解决方案


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

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

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

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

推荐阅读