Sco*_*ttG 1 c# aws-lambda aws-api-gateway
我正在关注一个演示,并使用 C# 创建了一个通过 AWSSDK 调用的 Lambda。函数处理程序如下所示:
public async Task<bool> FunctionHandler(string fileName, ILambdaContext context)
Run Code Online (Sandbox Code Playgroud)
这很好用。现在我想看看是否可以使用API网关调用它。我知道为了使其工作,我需要添加APIGatewayProxyRequest到函数签名中。我可以将其添加为参数还是必须替换变量“fileName”?
当我希望以两种方式调用该函数时,这是如何工作的?直接通过 SDK 还是通过 APIGateway?我可以让一个函数可以通过多种方式调用吗?
小智 5
Lambda不支持函数重载,只支持特定的函数调用。此外, main 方法期望接收第一个参数中的内容,因此在您的示例中它是APIGatewayProxyRequestor 。filename根据触发源,它可以是其他对象,例如S3Event,如果 Lambda 函数是由 S3 调用的。
您可以定义一个通用方法签名,例如FunctionHandler(Stream inputStream, ILambdaContext context),将参数解析inputStream为APIGatewayProxyRequest对象。
例如:
Amazon.Lambda.Serialization.Json.JsonSerializer jsonSerializer =
new Amazon.Lambda.Serialization.Json.JsonSerializer();
APIGatewayProxyRequest request =
jsonSerializer.Deserialize<APIGatewayProxyRequest>(inputStream);
Run Code Online (Sandbox Code Playgroud)
这样您就可以对多种触发器类型使用相同的方法。