当前位置: 首页 > 知识库问答 >
问题:

如何从亚马逊API网关将参数从POST传递给AWS Lambda

魏澄邈
2023-03-14

我正在尝试使用此解决方案将我的Api-Gateway地图应用程序/x-wow-form-urlencoded到json:如何从Amazon API Gateway将参数从POST传递到AWS Lambda

但是到目前为止,我的lambda被成功触发,只有我的request.body总是空的。如果有人知道如何使用. net-core c#处理它,我真的很感激洞察力。

到目前为止,我的无服务器lambda函数是这样的,我收到了时间戳,但没有关于request.body

public async Task<APIGatewayProxyResponse> Post(APIGatewayProxyRequest request, ILambdaContext context)
    {
        var webHook = new WebHookClient("https://{urlHiddenForObviousReasons}");
        var body = new BodyModel
        {
            Content = $"Trigger @ {DateTime.UtcNow}, {request.Body}"
        };
        await webHook.PostMessage(body);
        var response = new APIGatewayProxyResponse
        {
            StatusCode = (int)HttpStatusCode.OK,
            Body = "Alert received.",
            Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }
        };

        return response;
    }

请注意,如果我使用代理集成,而不是传递表单值,我希望使用映射,这样我就可以让两个客户端使用相同的api和不同的post方法,并且让lambda只解析json。以这种方式传递表单值的设置示例:key=1

共有1个答案

陈项禹
2023-03-14

您需要添加映射模板。例如:

{
    "name" : "$input.params('name')",
    "body" : $input.json('$') 
} 

这里也有一个很好的例子。

另一个对我来说更复杂的例子:

#set($allParams = $input.params())
{
"body-json" : $input.json('$'),
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

我不能评论C#代码,因为我已经习惯了Javascript和Python,但它似乎很好。

 类似资料:
  • 它不同于-如何从POST将参数从AmazonAPI网关传递到AWS Lambda。因为我可以在API网关中转换参数,但不能用Golang传递或打印它。然而,同样的API网关在Python上运行良好。 下面是我的API网关和AWS Lambda(Golang)的日志。我可以看到POST参数已成功转换为JSON。但是,我在Lambda函数日志中看不到它。 API网关日志 Lambda函数码 Lambd

  • 例如,如果我们想使用 或 如何将这两个示例作为参数传递给Lambda函数? 我在文档中看到了一些关于设置“Mapped From”的内容,但我在API网关控制台中找不到该设置。 用于在“方法请求”页中定义的名为的路径参数。 用于在“方法请求”页中定义的名为的查询字符串参数。 尽管我定义了一个查询字符串,但我没有看到这两个选项中的任何一个。

  • 我已经阅读了安装https的amazon ec2指南并完成了几个步骤。但它仍然不起作用。 签一个SSL认证,我用的是自签名证书。 使用aws iam将SSL证书上传到亚马逊服务器。 在ec2控制平台中,在当前安全组的入站中添加端口80和端口443 创建新的负载均衡器,在新的负载均衡器中添加端口80、端口443和带有上传证书的https的超文本传输协议,并在负载均衡器中分配当前实例 最后,我检查了实

  • 我正在尝试将API网关与Lambda代理集成, API服务器接收带有以下参数的请求,即邮政编码和住所 代码:

  • 我正在为webste构建一个功能,用户可以在其中重置密码。他收到一封电子邮件,其中包含URL中生成的令牌。单击此链接时,用户将被发送到/Reset页面。该页的Get方法如下: