C# 如何将查询字符串值从AWS API网关传递到Lambda C函数

C# 如何将查询字符串值从AWS API网关传递到Lambda C函数,c#,aws-lambda,aws-api-gateway,C#,Aws Lambda,Aws Api Gateway,我有一个C方法,我已经成功地发布为AWS Lambda函数。看起来是这样的: public class MyClass { public async Task<APIGatewayProxyResponse> Test(APIGatewayProxyRequest request, ILambdaContext context) { return new APIGatewayProxyResponse { Bod

我有一个C方法,我已经成功地发布为AWS Lambda函数。看起来是这样的:

public class MyClass
{
    public async Task<APIGatewayProxyResponse> Test(APIGatewayProxyRequest request, ILambdaContext context)
    {
        return new APIGatewayProxyResponse
        {
            Body = "Body: " + request.Body
                   + Environment.NewLine
                   + "Querystring: " + (request.QueryStringParameters == null ? "null" : string.Join(",", request.QueryStringParameters.Keys)),
            StatusCode = 200
        };
    }
}
我已通过web界面执行以下操作来配置API网关:

创建了一个新的API 创建了一个名为myclass和path/myclass的新资源 为资源创建了一个新的GET方法,使用Lambda函数作为集成类型,并指向我的Lambda函数。 我希望能够像这样调用Lambda函数,而无需在请求中传递任何指定的头:

我不确定如何将查询字符串参数传递到lambda函数。无论我尝试什么,request.QueryStringParameters始终为null


正确的操作步骤是什么?

请使用$input.params'YourQueryStringKey'


您可以在API网关集成响应中创建主体映射模板,然后尝试$input.params'YourQueryStringKey'或直接在Lambda函数中创建主体映射模板。

您需要为请求配置url查询字符串参数

转到API网关

单击适当的方法,即GET方法

转到方法执行

在方法执行中,选择URL查询字符串参数

添加查询字符串参数,如paramA、paramB

现在转到集成请求选项卡

选择主体映射模板,内容类型为application/json

生成模板,如下所示

{
 "paramA":  "$input.params('paramA')",
 "paramB":  "$input.params('paramB')"
}
在lamda函数中成对接受此键值


希望这会有帮助。

好的,我已经解决了问题

APIGatewayProxyRequest是从传递给Lambda函数的JSON反序列化的对象。如果接受JObject作为第一个参数,则可以看到传递给Lambda函数的原始JSON:

public async Task<APIGatewayProxyResponse> Test(JObject request, ILambdaContext context)
{
    return new APIGatewayProxyResponse
    {
        Body = request.ToString(),
        StatusCode = 200
    };
}
因此,为了填充APIGatewayProxyRequest,主体映射模板中指定的JSON需要匹配APIGatewayProxyRequest的属性。此处显示了一个模式示例,尽管它没有显示您需要的实际模板:


但是,使用APIGatewayProxyRequest实际上并不是必需的。只接受JObject作为Lambda函数的第一个参数更容易,然后您就可以访问所需的任何JSON。然后,您可以使用Vaibs回答中描述的技术。

您好,这是我尝试过的方法之一-请您更具体地说明我如何将其包含在我的身体映射模板或Lambda函数中?请查看,嗯,这个链接已经过时了——我相信在2016年写了这篇文章之后,AWS界面发生了变化。不幸的是,遵循这些说明会导致相同的NullReferenceException.ohh。我将在今天的某个时候做这件事并分享屏幕截图。嗨,很抱歉这不起作用:request.QueryStringParameters在Labmda函数中仍然为空。你以前试过C吗?这是正确的答案。顺便说一句,如果请求是POST或GET,如何在lambda内部进行检查?您可以在aws API的集成请求中使用http_方法:$context.httpMethod。然后您可以在aws lambda中的事件中访问新属性。