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