我有一个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"one_answers"路径"/myclass的新资源
- 使用" lambda函数"作为集成类型创建了一个新的获取方法,并指向我的lambda函数。
我希望能够像这样调用我的lambda函数(而无需传递请求中的任何指定标头):https://xxx.execute-api.us-east-2.amazonaws.com/prod/myclass?parama=valuea&Paramb; Paramb = valueb
我不确定如何使我的querystring参数传递到lambda函数。不管我尝试什么
此处的正确过程是什么?
您需要为请求配置URL查询字符串参数。
-
转到API Gateway
-
单击您的适当方法,即
GET
方法 -
转到方法执行
-
在方法执行中,选择URL查询字符串参数。
-
添加查询字符串参数,例如parama,paramb
-
现在转到Integration请求选项卡
-
选择车身映射模板,内容类型应用程序/json
-
生成类似于下面的模板
{ "paramA": "$input.params('paramA')", "paramB": "$input.params('paramB')" }
-
在lamda函数中接受该键值。
希望这会有所帮助。
好吧,我已经弄清楚了问题。
ApigatewayProxyRequest是从JSON传递给Lambda函数的对象。您可以看到正在传递给lambda函数的RAW JSON,如果您接受求职为第一个参数:
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-gatewaywayway-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
但是,实际上并不需要使用ApigatewayProxyRequest。仅接受Jobject作为Lambda函数的第一个参数会更容易,然后您可以访问所需的任何JSON。然后,您可以使用像Vaibs答案中描述的技术一样。
请使用" $ input.params('yourqueryStringKey')。
您可以在API网关集成响应中创建车身映射模板,然后尝试" $ input.params('yourqueryStringKey")或直接在lambda函数中。