如果字符串类型的函数也需要对象类型param,如何在函数中传递参数



我有函数处理程序

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)

最新更新