Swagger:从外部服务器获取 swagger.json 但使用本地服务器作为主机

Swagger: get swagger.json from external server but use the localserver as host

由于动态生成 swagger json 在本地大约需要 3 秒(由于 dotnet 中的反射),我尝试实现以下目标:

  1. 在 swagger-ui 中使用的 swagger.json 应该位于 CDN 服务器上,这样它就不会在运行时生成。它是在 build-time
  2. 期间通过 cli 生成的
  3. 当我使用 swagger-ui 进行调用时,base-url 当然不应该是这个 cdn 位置,而是一个相对位置

这是行不通的:

var cdnPath = https://linktomycdn.com/staticswaggerstore
app.UseSwagger(c => c.SerializeAsV2 = true);
string swaggerUrl = $"{cdnPath}/swagger-{Version}.json";
app.UseSwaggerUI(options =>
{
  options.SwaggerEndpoint(swaggerUrl, $"My  API v{Version}");
  options.OAuthClientId($"{config.ClientAuthConfig.JwtClientId}");
  options.OAuthAppName($"{config.ClientAuthConfig.JwtClientApp}");
 });

发生的事情是服务器正确加载了 json 文件(我使用 swagger-cli 工具创建的)但是当我尝试使用 swagger-ui [=20 进行调用时=]它使用 cdnpath 作为基础。 所以没有呼叫工作。

我可以“拆分”swagger.json 位置和实际端点吗?

我通过生成带有特定 --host 标志的 json 文件使它工作

例如

dotnet swagger tofile --serializeasv2 --host mycoolapi.com --output .swagger-1.0.0.json /app/MyDll.dll v1.0.0

所以现在我的 API 正在使用 https://mycoolapi.com as host but the json sits on my CDN https://linktomycdn.com/staticswaggerstore。这在 C# 代码中配置为 SwaggerEndpoint

确保不在 --host 参数中提供架构 (https)