如何将查询字符串值从AWS API网关传递到Lambda C#函数
我有一个C#方法,我已成功发布为AWS Lambda函数。它看起来像这样:如何将查询字符串值从AWS API网关传递到Lambda C#函数
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的”和路径“/ myclass”
- 为资源创建新的GET方法,使用“Lambda函数”作为集成类型,并指向我的Lambda函数。
我希望能够打电话给我这样的lambda函数(不传入请求的任何指定的头): https://xxx.execute-api.us-east-2.amazonaws.com/prod/myclass?paramA=valueA¶mB=valueB
我不确定如何让我的查询字符串参数通过传递给拉姆达功能。无论我尝试什么,request.QueryStringParameters始终为空。
这里的正确程序是什么?
好的我已经找到了问题。
APIGatewayProxyRequest是从传递给Lambda函数的JSON反序列化的对象。你可以看到,被传递给lambda函数的原始JSON,如果你接受JObject作为,而不是第一个参数:
public async Task<APIGatewayProxyResponse> Test(JObject request, ILambdaContext context)
{
return new APIGatewayProxyResponse
{
Body = request.ToString(),
StatusCode = 200
};
}
因此,为了填补APIGatewayProxyRequest,在身体映射模板中指定的JSON需要匹配APIGatewayProxyRequest的属性。这里有一个架构示例(尽管它没有显示您需要的实际模板):https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
但是,使用APIGatewayProxyRequest实际上并不是必需的。接受JObject作为Lambda函数的第一个参数比较容易,然后您可以访问任何您需要的JSON。然后,您可以使用像Vaibs的答案中描述的技术。
请使用“$ 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函数中配对。
希望这会对您有所帮助。
嗨,那是我尝试过的一件事情 - 请问您可以更具体地了解我的身体映射模板或Lambda函数的具体含义? – cbp
请看看,https://aws.amazon.com/blogs/compute/using-api-gateway-mapping-templates-to-handle-changes-in-your-back-end-apis/ –
嗯,那链接已过时 - 我相信在撰写文章后,AWS界面在2016年发生了变化。不幸的是,遵循这些指令会导致相同的NullReferenceException。 – cbp