Как передать параметр в функцию типа string, если для этого также требуется тип объекта param? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть обработчик функции

namespace AWSLambda2
{

    public class input
    {
        public string name { get; set; }
        public string email { get; set; }
    }

    public class Function
    {
        public string FunctionHandler(string data, input input)
        {   
            return input.name?.ToUpper()+", "+input.email?.ToUpper()+", "+data; 
        }
    }
}

Требуется параметр типа строки и входные данные типа объекта.Хорошо.

Для типа объекта я могу передать:

{
    "name":"test",
    "email": "test@gmail.com"
}

, но выдает ошибку, потому что я тоже должен передать параметр данных.Как передать это при передаче полезной нагрузки JSON для POST-запроса, используя POSTMAN или Swagger.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Согласно Обработчик лямбда-функции AWS в C #

Вы определяете обработчик лямбда-функции как экземпляр или статический метод в классе.Если вам нужен доступ к объекту контекста Lambda, он доступен путем определения параметра метода типа ILambdaContext, интерфейса, который вы можете использовать для доступа к информации о текущем выполнении, такой как имя текущей функции, лимит памяти, время выполненияоставшиеся и ведение журнала.

returnType handler-name(inputType input, ILambdaContext context) {
   ...
}

В синтаксисе обратите внимание на следующее:

  • inputType - Первый параметр обработчика является входом дляобработчик , который может быть данными события (опубликованными источником события) или предоставленными вами пользовательскими данными, такими как строка или любой пользовательский объект данных.

  • returnType - Есливы планируете вызывать функцию Lambda синхронно (используя тип вызова RequestResponse), вы можете вернуть выходные данные своей функции, используя любой из поддерживаемых типов данных.Например, если вы используете функцию Lambda в качестве серверной части мобильного приложения, вы вызываете ее синхронно.Ваш выходной тип данных будет сериализован в JSON.
    Если вы планируете вызывать функцию Lambda асинхронно (используя тип вызова Event), returnType должен быть void.Например, если вы используете AWS Lambda с источниками событий, такими как Amazon S3 или Amazon SNS, эти источники событий вызывают функцию Lambda, используя тип вызова Event.

Согласно Работа с лямбда-функциями: модель программирования

Вы пишете код для своей лямбда-функции на одном из языков, поддерживаемых AWS Lambda. Независимо от выбранного вами языка, существует общий шаблон написания кода для лямбда-функции , который включает в себя следующие основные понятия:

  • Обработчик - Обработчик - это функция, которую AWS Lambda вызывает для запуска выполнения вашей функции Lambda.Вы определяете обработчик, когда создаете свою функцию Lambda.Когда вызывается лямбда-функция, AWS Lambda начинает выполнять ваш код, вызывая функцию-обработчик. AWS Lambda передает любые данные о событиях этому обработчику в качестве первого параметра .Ваш обработчик должен обработать входящие данные о событиях и может вызывать любые другие функции / методы в вашем коде.
  • Объект контекста и как он взаимодействует с Lambda во время выполнения - AWS Lambda также передает объект контекста в функцию-обработчик в качестве второго параметра .С помощью этого объекта контекста ваш код может взаимодействовать с AWS Lambda.Например, ваш код может найти время выполнения, оставшееся до того, как AWS Lambda завершит вашу функцию Lambda.
    Кроме того, для таких языков, как Node.js, существует асинхронная платформа, которая использует обратные вызовы.AWS Lambda предоставляет дополнительные методы для этого объекта контекста.Вы используете эти методы объекта контекста, чтобы сообщить AWS Lambda прекратить работу вашей лямбда-функции и при необходимости вернуть значения вызывающей стороне.

.....

выделениемой.

Итак, чтобы ответить на ваш заголовок

Как передать параметр в функцию типа string, если для него также требуется тип объекта param?

Краткий ответ: Вы не можете

Я предлагаю создать конкретную модель для хранения требуемых данных

public class SampleClass {
    public string data { get; set; }
    public Input input { get; set; }
}

И использовать ее для ввода функции

namespace AWSLambda2 {

    public class Input {
        public string name { get; set; }
        public string email { get; set; }
    }

    public class Function {
        public string FunctionHandler(SampleClass input) {
            var data = input.data;
            var user = input.input;
            return user.name?.ToUpper()+", "+user.email?.ToUpper()+", "+data; 
        }
    }
}

Аналогично тому, как это показано в предоставленных образцах

https://github.com/guitarrapc/AWSLambdaCSharpIntroduction/tree/master/src

0 голосов
/ 05 декабря 2018

Почему у вас не может быть DTO для хранения данных, как показано ниже, и ваш обработчик принимает этот тип public string FunctionHandler(MyModel model)

public class MyModel
{
  public string Data {get; set;}
  public Input Input {get; set;}
}

Я вижу, тогда дополнительные данные передаются через строку запроса иопределите ваш обработчик Api как таковой

public string FunctionHandler([FromQuery]string data, [FromBody]input input)
...