如何从Amazon API Gateway将参数从POST传递到AWS Lambda

时间:2017-06-18 17:04:05

标签: c# .net-core aws-lambda aws-api-gateway

我正在尝试使用此解决方案将我的Api-Gateway地图应用程序/ x-www-form-urlencoded转换为json: How to pass a params from POST to AWS Lambda from Amazon API Gateway

但到目前为止,我的lambda仅成功触发了我的request.body始终为null。如果有人知道如何处理.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&amp; steamid = 1&amp; notetitle = ARK-ALARM%3A + 06%2F17 +%40 + 16%3A24 + on +旧石器时代+方舟+ - + +岛屿%2C + ALARM +&#39;基地&#39; + IN +&#39;该+隐+湖&#39; +是+ TRIPPED&安培;!消息= ...

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要添加Mapping Template。 例如:

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

在POST方法的“集成请求”部分添加此内容。AWS API Gateway Integration Request

一个非常好的例子是here

另一个对我有用的更复杂的例子:

#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,但似乎没法。