C# 如何将查询字符串值从AWS API网关传递到Lambda C函数
我有一个C方法,我已经成功地发布为AWS Lambda函数。看起来是这样的: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
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中的事件中访问新属性。