2

Я работаю над C# /. Net-серверным приложением, использующим AWS Visual Studio Toolkit, и у меня есть немного проблем с выяснением того, чего я не вижу, насколько CORS конфигурации. Я основал свой проект от примера ASP.Net, входящего в комплект инструментария, который настроил API Gateway на наличие единой конечной точки API, которая работает как прокси-сервер в среде ASP.Net Web API.Настройка CORS через API-шлюз для архитектуры безсерверной архитектуры Конечная точка прокси-сервера

enter image description here

При тестировании этого приложения в хроме (обслуживающий проект локального узла) я получаю No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

Я знаю, что это означает, что я должен настроить CORS на API шлюза конечной точки, но я, кажется, отсутствует что-то. Я использую действие выпадающего, чтобы позволить CORS как таковые ...

enter image description here

Но я получаю некоторые ошибки и проблема устранена.

enter image description here

Я использовал расширение хрома, чтобы отключить CORS (временно) и подтвердил, что API конечная точка работает нормально без CORS.

Так что же мне здесь не хватает? Примеры установки CORS online обычно не имеют инструкций конечной точки catch-all, как это было настроено для использования, и даже нарушение GET в свой собственный метод, похоже, не помогло.

В качестве дополнительного вопроса, если есть какая-то конфигурация CORS, мне не хватает, есть ли хороший способ интегрировать ее в файл serverless.template или какой-либо другой автоматизированный шаг развертывания?

ответ

5

Это связано с вашим прокси-методом ANY. Как указано здесь: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

Примечание При применении вышеуказанных инструкций к любому способу, в интеграции прокси, не будут устанавливать любые соответствующие заголовки CORS. Вместо этого, вы полагаетесь на интеграцию обратно конца, чтобы вернуть применимые заголовки CORS, такие как Access-Control-Allow-Origin

Таким образом, вы должны сделать ваш бэкенд API возвращают соответствующие заголовки CORS.

+0

Я мог ошибаться, но я думаю, что API Gateway вернет заголовки CORS в вызове OPTIONS. Именно для фактического вызова необходимо, чтобы ваш сервер возвращал заголовок Access-Control-Allow-Origin. – user1432403

0

Для API-работать должным образом две вещей необходимо сделать: 1. Метод параметров должен быть правильно настроен - обычно делаются используя макет метода на шлюзе API. 2. Реализации метода HTTP в вашем коде должны правильно возвращать заголовок CORS. Есть много статей об этом, если вы ищете.

Для меня проблема была в точке 1; использование кнопки «Включить CORS» API Gateway не работало для меня, когда я разрабатывал интеграцию Lambda API-Gateway с использованием .NET Core. Я также не нашел способ добавить создание метода options в файле serverless.template.

Вот еще один способ сделать это; после публикации lambdas из CLI или VisualStudio, запустите запрос PUT в конечной точке API и передайте определение swagger, которое содержит метод опций defs, и убедитесь, что вы задали параметр param mode = merge. Вы можете использовать PostMan для этого.

или

Вы можете использовать утилиту DotNet, которая делает то же самое описано здесь: http://sbytestream.pythonanywhere.com/blog/Enabling-APIGateway-CORS Исходный код доступен на GitHub тоже.