Интерфейс Swagger - "TypeError: Failed to fetch" при действительном ответе
Я только что снял последнюю версию Swagger из репозитория Git (3.0.19), используя: https://github.com/swagger-api/swagger-ui.git, и обновил мой API для использования новой версии.
git describe --tags
для подтверждения и моя версия сейчас: v3.0.19-6-gaab1403
У меня возникла проблема, описанная здесь, в которой мой ответ - 403 (я вижу это в инспекторе в браузере), и хотя у меня есть ответ на ошибку 403, я все еще получаю сообщение TypeError: Failed to fetch
.
![enter image description here]()
![enter image description here]()
Вот фрагмент моего определения относительно ответа 403:
"403": {
"description": "Forbidden",
"headers": {
"Access-Control-Allow-Origin": {
"type": "string"
}
}
},
Я также заметил, что здесь сообщается, однако, я знаю, что это не проблема CORS, так как я проверил конечные точки, и ОПЦИИ возвращаются правильно, как и конечные точки, если они вызваны с действительной информацией (я форсирую это 403).
Может ли кто-нибудь указать мне правильное направление, пожалуйста?
Обновление: с тех пор я проверил ответ 401 с тем же ответом.
![enter image description here]()
И что 400 работает, как ожидалось:
![enter image description here]()
Ответы
Ответ 1
Для тех, кто сталкивается с этой проблемой;
После дня устранения неполадок и поддержки со стороны Swagger, ребята направляют меня в правильном направлении, выясняется, что это в настоящее время вызвано ошибкой в пользовательских авторизаторах AWS API Gateway.
В настоящее время мы используем AWS API Gateway для управления нашими API, включая управление всей нашей авторизацией с помощью специального авторизатора. Проблема заключается в том, что пользовательские авторизаторы в настоящее время не поддерживают прохождение через заголовки в ответе, а пользовательскому интерфейсу Swagger требуется Access-Control-Allow-Origin:*
в заголовке (-ах) ответа для отображения правильного кода состояния HTTP.
Посмотрите эту ветку AWS, касающуюся проблемы (которая старше года):
https://forums.aws.amazon.com/thread.jspa?messageID=728839
Swagger UI обсуждение того же: https://github.com/swagger-api/swagger-ui/issues/3403
РЕДАКТИРОВАТЬ/ОБНОВИТЬ
С тех пор это было решено с использованием ответов шлюза. Смотрите этот же форум (страница 2):
https://forums.aws.amazon.com/thread.jspa?messageID=728839
Ответ 2
Я столкнулся с этой ошибкой во время локальной разработки (то есть не имел ничего общего с AWS). Основная причина (нарушение CORS) идентична. Следующее может помочь другим, кто столкнулся с этой проблемой.
Я настроить связь с OpenAPI спецификации, которые называют HTTP://локальный: 9090/. Когда сервер разработки запускается, он говорит: "Запуск на http://0.0.0.0:9090/ ". Эта страница работает, но пользовательский интерфейс swagger использует http://localhost: 9090/ из спецификации openapi для последующих запросов и показывает TypeError: Failed to fetch
for TypeError: Failed to fetch
in results. В консоли браузера отображается " Access to fetch at 'http://localhost:9090/vr/variation' from origin 'http://0.0.0.0:9090'
. Предоставленная команда curl
работала нормально; Несмотря на первоначальную путаницу, успех curl является признаком того, что проблема связана с блокировкой браузера, а не с ошибкой на стороне сервера.
(Connexion основан на флешке Python и обеспечивает расширенную поддержку интеграции с openapi.)
Ответ 3
Поскольку проблема перекрестного происхождения означает, что ваш веб-сайт размещен либо локально, либо с портом 8000 или с другим портом, а номер порта вашего сваггера другой, поэтому эта проблема является подлинной. Мы можем это исправить, дав разрешение.
Вот код узла:
app.use( (request, response, next) => {
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
Мы также можем решить с помощью CORS npm. https://www.npmjs.com/package/cors
Ответ 4
Отказ от ответственности: - Этот ответ для API, разработанных с использованием Asp.net Core
Я столкнулся с подобной проблемой при попытке получить доступ к API из редактора интерфейса Swagger. Я пытался получить доступ к некоторым API, разработанным с использованием Asp.net Core, где редактор Apache Swagger размещался на Apache. Я столкнулся с CORS (Cross Orgin Request).
Я должен изменить свой код API, чтобы разрешить запрос CORS, используя следующий код: - Объявить в файле Startup.cs, имеющий класс "StartupShutdownHandler"
private readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
Добавлен раздел кода в методе ConfigureServices.
var str = ConfigurationHandler.GetSection<string>(StringConstants.AppSettingsKeys.CORSWhitelistedURL);
if (!string.IsNullOrEmpty(str))
{
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins(str);
});
});
}
Добавлена строка кода в методе настройки.
app.UseCors(MyAllowSpecificOrigins);
Ссылка Включить перекрестные запросы (CORS) в ASP.NET Core
Ответ 5
Установите Cors в вашем API. См. Ссылку ниже: https://www.npmjs.com/package/cors#usage.