我有函数处理程序
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;
}
}
}
它采用字符串类型param和对象类型的输入。好的
对于我可以通过的对象类型:
{
"name":"test",
"email": "test@gmail.com"
}
但它抛出了一个错误,因为我也必须传递数据参数。如何在使用POSTMAN或Swagger为POST请求传递JSON负载时传递它。
根据C#中的AWS Lambda函数处理程序
您将Lambda函数处理程序定义为实例或静态方法在课堂上。如果您想访问Lambda上下文对象,它是通过定义ILambdaContext类型的方法参数可用于访问有关当前执行,例如当前函数的名称、内存限制,剩余执行时间和日志记录。
returnType handler-name(inputType input, ILambdaContext context) { ... }
在语法中,请注意以下内容:
inputType
–第一个处理程序参数是处理程序的输入,可以是事件数据(由事件源发布(或自定义输入例如字符串或任何自定义数据对象。
returnType
–如果您计划同步调用Lambda函数(使用RequestResponse调用类型(,您可以返回输出使用任何支持的数据类型。例如如果使用Lambda函数作为移动应用程序后端,则同步调用它。您的输出数据类型将被序列化转换为JSON
如果计划异步调用Lambda函数(使用事件调用类型(,returnType应为void。例如,如果您将AWS Lambda与事件源(如Amazon S3或Amazon SNS(一起使用,这些事件源使用事件调用Lambda函数调用类型。
根据Lambda函数的工作:编程模型
您可以使用AWS Lambda支持的语言之一为Lambda函数编写代码无论您选择哪种语言,为Lambda函数编写代码都有一种常见模式,其中包括以下核心概念:
- Handler–Handler是AWS Lambda调用的函数,用于启动Lambda函数的执行。在创建Lambda函数时,可以识别处理程序。当调用Lambda函数时,AWS Lambda通过调用处理程序函数开始执行代码AWS Lambda将任何事件数据作为第一个参数传递到此处理程序。处理程序应该处理传入的事件数据,并可以调用代码中的任何其他函数/方法
- 上下文对象及其在运行时如何与Lambda交互–AWS Lambda还将上下文对象作为第二个参数传递给处理程序函数。通过这个上下文对象,您的代码可以与AWS Lambda进行交互。例如,您的代码可以找到AWS Lambda终止Lambda函数之前剩余的执行时间
此外,对于Node.js等语言,还有一个使用回调的异步平台。AWS Lambda在此上下文对象上提供了其他方法。您可以使用这些上下文对象方法来告诉AWS Lambda终止您的Lambda函数,并可以选择向调用方返回值。。。。。
强调矿
所以回答你的标题
如果字符串类型的函数还需要对象类型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
为什么你不能有一个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)