Swagger показывает ошибку «Не удалось загрузить определение API» при доступе с прокси-сервера YARP

Поскольку оцелот больше не обслуживается, я решил попробовать YARP в качестве своего шлюза API, но он выдает мне эту глупую ошибку, когда я получаю через него доступ к одной из своих конечных точек:

      
  "ReverseProxy": {
    "Routes": {
      "client-route": {
        "ClusterId": "client-cluster",
        "CorsPolicy": "customPolicy",
        "Match": {
          "Path": "client-service/{**remainder}"
        },
        "Transforms": [
          { "X-Forwarded": "Off" },
          {
            "PathPattern": "/{**remainder}"
          }
        ]
      }
    },
    "Clusters": {
      "client-cluster": {
        "Destinations": {
          "destination1": {
            "Address": "https://URLWithSwagger/"
          }
        }
      }
    }
  }

при использовании конфигурации выше я получаю следующую ошибку:

но когда я меняю путь с "client-service/{**remainder}" к "/{**remainder}", все отлично работает! какие-нибудь предложения относительно корня этой ошибки?

1 ответ

В вашем образце путьclient-service/urlпересылается как есть на серверную часть. И такого URL не существует. Вот почему удаление префикса снова работает.

Чтобы исправить: вам нужно преобразовать URL-адрес, чтобы удалитьclient-serviceпрефикс для каждого маршрута. Вы можете сделать это с помощью yarp , добавивPathRemovePrefixтрансформатор:

      "client-route": {
    "ClusterId": "client-cluster",
    "Match": {
      "Path": "/client-service/{****remainder}"
    },
    "Transforms": [
      { "PathRemovePrefix": "/client-service" }
    ]
  },
      

Это поможет получить необработанную спецификацию чванства (файл JSON). Если вы хотите отобразить его на SwaggerUI, вы должны внедрить SwaggerUI на обратном прокси-сервере и передать ему перенаправленный контракт: URI openapi.json.

Подробнее об этом см. в этом выпуске .

Другие вопросы по тегам