Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果string类型的函数还需要对象类型param,如何在该函数中传递参数?_C#_Json_Amazon Web Services_Aws Lambda_Aws Serverless - Fatal编程技术网

C# 如果string类型的函数还需要对象类型param,如何在该函数中传递参数?

C# 如果string类型的函数还需要对象类型param,如何在该函数中传递参数?,c#,json,amazon-web-services,aws-lambda,aws-serverless,C#,Json,Amazon Web Services,Aws Lambda,Aws Serverless,我有一个函数处理程序 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)

我有一个函数处理程序

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负载时传递该数据。

为什么不能使用DTO来保存以下两种数据,并让处理程序接受该类型
公共字符串函数处理程序(MyModel model)

我明白了,然后通过查询字符串传递额外的数据,并像这样定义Api处理程序

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

将Lambda函数处理程序定义为实例或静态方法 在课堂上。如果希望访问Lambda上下文对象,则 通过定义ILambdaContext类型的方法参数 接口,您可以使用该接口访问有关当前 执行,例如当前函数的名称、内存限制、, 剩余执行时间和日志记录

returnType handler-name(inputType input, ILambdaContext context) {
   ...
}
在语法中,请注意以下内容:

  • inputType
    第一个处理程序参数是处理程序的输入, 可以是事件数据(由事件源发布)或自定义输入 您提供的,例如字符串或任何自定义数据对象

  • returnType
    –如果您计划同步调用Lambda函数 (使用RequestResponse调用类型),可以返回输出 使用任何受支持的数据类型创建函数的。例如 如果将Lambda函数用作移动应用程序后端,则 同步调用它。您的输出数据类型将被序列化 转换为JSON。
    如果计划异步调用Lambda函数(使用 事件调用类型),返回类型应为void。例如,如果 将AWS Lambda与事件源(如Amazon S3或Amazon SNS)一起使用, 这些事件源使用事件调用Lambda函数 调用类型

您可以使用AWS Lambda支持的语言之一为Lambda函数编写代码无论您选择何种语言,为Lambda函数编写代码都有一种通用模式,其中包括以下核心概念:

  • Handler–Handler是AWS Lambda调用的函数,用于开始执行Lambda函数。在创建Lambda函数时标识处理程序。当调用Lambda函数时,AWS Lambda通过调用handler函数开始执行代码AWS Lambda将任何事件数据作为第一个参数传递到此处理程序。处理程序应该处理传入的事件数据,并可以调用代码中的任何其他函数/方法
  • 上下文对象及其在运行时如何与Lambda交互AWS Lambda还将上下文对象作为第二个参数传递给处理程序函数。通过此上下文对象,您的代码可以与AWS Lambda交互。例如,您的代码可以找到AWS Lambda终止Lambda函数之前剩余的执行时间。
    此外,对于Node.js等语言,还有一个使用回调的异步平台。AWS Lambda为此上下文对象提供了其他方法。您可以使用这些上下文对象方法来通知AWS Lambda终止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; 
        }
    }
}
与提供的样本中显示的类似


您在哪里使用了
上下文
参数?不,在哪里,默认情况下,lambda函数会使用该参数。。。如果不需要,则不需要传递。
公共类输入
应该是
公共类输入
类是capitalised@Matt:谢谢,但这不是问题所在。请阅读问题。这是问题之一,可能不是问题。谢谢,是的,我很累,但我正在用另一种方法测试它,就像我在问题中描述的那样。你不能在lambda函数中这样做,只能在webapi中这样做
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; 
        }
    }
}