Aws-lambda-dotnet: Документы Swagger открываются при интеграции с API-шлюзом

Созданный на 30 янв. 2018  ·  22Комментарии  ·  Источник: aws/aws-lambda-dotnet

Привет, народ,

У меня есть основной веб-API .net, в котором есть собственные документы интеграции swagger, представленные через конечную точку swagger / v1 / swagger.json. Он развернут как лямбда. Я также установил шлюз api, который интегрируется с этой лямбдой, чтобы показать все API.

У меня проблема в том, что я не могу получить доступ к документам swagger через URL-адрес / swagger. Он всегда возвращает «сообщение: запретить». Я определенно могу получить доступ к чванству, если запущу веб-api локально.

Любые идеи?

Спасибо

Джейсон

guidance

Самый полезный комментарий

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.

Все 22 Комментарий

Можете ли вы создать для меня простой репозиторий?

У меня такая же проблема.

Добились ли вы прогресса с этим @jasondaicoder?

Та же проблема, обновите, если найдете исправление. Я могу получить доступ к json напрямую, например .. https: //...../Prod/swagger/v1/swagger.json . Поскольку API Gateway поддерживает чванство, я подумал что-то волшебное о пути «чванства». Но, используя информацию с этой страницы, http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ , я изменил ее на "swag" и все та же проблема.

Интересно, что когда вы получаете доступ к https: //.../swagger , в основном удаляя стадию пути и обратно в корень, что затем приводит к сообщение запрещено.

Не совсем парни. Я думал, что это может быть потому, что шлюз api должен действовать только для веб-api, но не для пользовательского интерфейса. В итоге я разместил пользовательский интерфейс где-то еще, но указал на файл swagger json проекта через шлюз api. Оно работает.

Спасибо. Хм, как бы больно это делать :) У меня есть обычный домашний контроллер MVC и страница индекса как часть моего развертывания, и он отлично работает. Да, я только что читал сообщение, в котором человек подумал, что это может быть связано с тем, что ответ был не json, но моя страница индекса работает нормально.

С моим решением вам действительно нужно развернуть пользовательский интерфейс только один раз. Пока вы загружаете файл json из своего проекта, вам больше не нужно ничего делать. Мы размещаем файлы пользовательского интерфейса на S3. Возможно, команда AWS сможет исправить проблему позже.

интересно .. вы можете развернуть пользовательский интерфейс .net core на S3 без запущенной пустельги? подумал, что чванство было своего рода вещью во время выполнения и необходимо для поддержки запущенных dll и т.д., например, не просто статического набора файлов

@normj , проект представляет собой обычное c # оружие с точкой входа Lamdba. Ничего особенного. Попробую создать репозиторий примеров на GitHub позже. Честно говоря, я не думаю, что что-то плохое в моем проекте, поскольку у других людей такая же проблема. Я думаю, что это могут быть некоторые конфликты со встроенными документами swagger api gateway.

@rslangham нет, вам не нужно развертывать свой проект. Все, что вам нужно, это загрузить статические файлы swagger ui, которые вы можете получить с сайта swagger (возможно, ссылку на GitHub, которую вы можете найти на сайте swagger).

@jasondaicoder благодарит за предложение об использовании статических файлов пользовательского

На самом деле хотел бы найти правильное решение :) Еще раз спасибо.

Привет, у меня точно такая же проблема, надеюсь, она скоро решится.

Наблюдая за той же проблемой.

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.

@AnandKhedkar, который сработал для меня, спасибо

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.

Это показывает страницу Index.html. Однако он не позволяет мне выполнять службу через интерфейс swagger.
Путь в URL-адресе запроса для вызова GET снова исключает Prod.
Однако я использую c.RoutePrefix = string.Empty; для рендеринга страницы в корне вместо добавления / swagger.

Есть ли свойство, которое можно настроить так, чтобы оно оставалось согласованным для всех относительных ссылок на URL?

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.

Это показывает страницу Index.html. Однако он не позволяет мне выполнять службу через интерфейс swagger.
Путь в URL-адресе запроса для вызова GET снова исключает Prod.
Однако я использую c.RoutePrefix = string.Empty; для рендеринга страницы в корне вместо добавления / swagger.

Есть ли свойство, которое можно настроить так, чтобы оно оставалось согласованным для всех относительных ссылок на URL?

Решено с помощью этого решения Работает отлично и даже показывает базовый путь в заголовке страницы swagger.

Закрытие, поскольку похоже, что решение было найдено.

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.
В каком файле это определять.

У меня тоже была такая же проблема. Есть решение-
Убедитесь, что вы добавили этап в имя в файле запуска, как показано ниже. где Прод - мой сценический псевдоним.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Просьба @normj закрыть это.

это сработало для меня.
Спасибо

Я столкнулся с той же проблемой; но HARDCODING PROD (имя этапа) в код НЕ ВАРИАНТ. Есть ли способ определить, на каком этапе развертывания шлюза API выполняется лямбда-выражение? вар среды AWS или что-то в этом роде?

@grahamehorner Вот что я сделал, чтобы решить проблему без

app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("v1/swagger.json", "GST Console API - V1");
});

В основном просто настройте конечную точку с помощью c.SwaggerEndpoint() используя URL-адрес относительного пути без «чванства» и начального символа «/».

Если мы предоставим URL относительного пути без начала "/" до c.SwaggerEndpoint() , абсолютный URL конечной точки будет получен из

AWS Serverless Url + "/" + c.RoutePrefix + "/" + the supplied url

где c.RoutePrefix по умолчанию установлен на 'swagger'

Например, если ваш URL без сервера AWS - https://xyz.central.amazonaws.com/Prod , ваш абсолютный URL будет https://xyz.central.amazonaws.com/Prod/swagger/v1/swagger .json '

Была ли эта страница полезной?
0 / 5 - 0 рейтинги