#c# #aws-lambda
#c# #aws-лямбда
Вопрос:
Я копаюсь в новых шаблонах dotnet для лямбд в AWS и ломаю голову над правильным способом передачи строковых данных через Postman (или любой веб-клиент на самом деле).
Я использую шаблон пустой функции Lambda от AWS. Просто a dotnet new lambda.EmptyFunction
с единственными изменениями, внесенными в файл lambda-tools, чтобы указать на мои учетные данные AWS и регион. Развертывание работает нормально. Вызов функции из локального терминала через глобальные инструменты работает нормально:
dotnet-lambda invoke-function lambda-hello-empty --payload "test"
В консоли AWS использование функции Test также работает со значением just test
без каких-либо строк или оболочек JSON.
Я добавил шлюз API и пытаюсь выполнить тот же вызов через Postman с помощью HTTP post, но каждый вызов завершался неудачей с этой ошибкой:
Ошибка преобразования полезной нагрузки JSON лямбда-события в строку. Строки JSON должны быть заключены в кавычки, например «Hello World», чтобы быть преобразованными в строку: значение JSON не может быть преобразовано в System.Строка
У меня есть отдельный API-шлюз, добавленный таким же образом, который не принимает параметр и просто возвращает строку, и это работает, поэтому я не думаю, что проблема связана со шлюзом.
Я уверен, что здесь есть шаг, которого мне не хватает при правильной сериализации, но я его не вижу. Это явно работает с консолей AWS, но поскольку я не знаю, что они могут делать для форматирования, я хочу увидеть эту работу «сырой».
Комментарии:
1. просто предположение,
'"test"'
вместо"test"
того, чтобы работать?2. Нет, по-прежнему не удается проанализировать строку.
Ответ №1:
Похоже, что где-то в API Gateway / Lambda-стеке ожидаются какие-то дополнительные метаданные, которые мне не хватало. Благодаря тому, что мой класс startup является производным от Amazon.Лямбда.AspNetCoreServer.APIGatewayProxyFunction, я смог заставить запрос работать через Postman и через другие приложения.
Комментарии:
1. Это простое изменение было тем, на что я надеялся, но оно не сработало для меня. Вы хотите сказать, что вы просто буквально изменили функцию публичного класса в 1 строку: APIGatewayProxyFunction { а затем добавили необходимый пакет nuget, и это сработало?
2. Я думаю, этого было достаточно, но это было год назад, так что я не уверен.