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.
Подробнее об этом см. в этом выпуске .