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

3
我正在尝试使用以下解决方案让我的Api-Gateway将application/x-www-form-urlencoded映射到json: 如何从Amazon API Gateway将params从POST传递给AWS Lambda 但是,到目前为止,我的lambda仅成功触发,但请求体始终为空。如果有人知道如何在.net-core c#中处理它,我会非常感激您的见解。
这是我的无服务器lambda函数目前的样子,我收到了时间戳,但没有关于请求体的任何信息。
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;
    }

请注意,如果我使用代理集成而不是映射,则会传递表单值。我想使用映射,这样我可以让两个客户端使用不同的Post方法,并且只有Lambda解析JSON。以下是设置示例,以此方式传递表单值:key = 1&amp;steamid = 1&amp;notetitle = ARK-ALARM%3A + 06%2F17 +%40 + 16%3A24 + on + Paleolithic + Ark + - The + Island,+ ALARM +'Base'+IN+'The+Hidden+Lake'+WAS + TRIPPED!&message = ... enter image description here

1
您尝试过使用 CW 日志调试 API GW 映射/处理吗?如果您在 API GW 控制台中使用“测试”功能,您可以查看带有完整日志输出的干运行请求,以便您可以查看实际传递给 Lambda 的原始请求,以及执行映射模板前/后的请求正文。 - jackko
1个回答

2

您需要添加一个映射模板

例如:

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

在POST方法的Integration Request部分添加以下内容。AWS API Gateway Integration Request 这里还有一个非常好的例子 下面是一个更加复杂的可以正常工作的例子:
#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,但它 看起来 不错。


好的,链接的示例是动态地进行映射,但我会尝试使用您的静态示例。看看它是否有效。 - Lorien
抱歉我花了一些时间才接受你的答案。这就是我最终所做的事情,然后忘记回来这里了。 - Lorien
嘿,别担心,我很感激你回来 :) - cameck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接