Интерфейс 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