【问题标题】:How to pass the query string parameters in the AWS API Gateway?如何在 AWS API Gateway 中传递查询字符串参数?
【发布时间】:2026-02-03 21:25:01
【问题描述】:

以下是我的 Lambda 处理程序,它期望来自 queryStringParameters 的 users 数据:-

export const lambdaHandler = async (event, context) => {
    try {
        const numberOfUsersRequested= (event && event.queryStringParameters.users) ? event.queryStringParameters.users : 10;
        const users = await generateUsers(numberOfUsersRequested).then(data => data.users);

我正在使用 AWS SAM 开发我的 Lambda,我可以使用 event.json 作为本地此 Lambda 的输入事件很好地测试它。这是一段 event.json,我在其中传递 queryStringParamters 用户,如下所示:-

{
  "body": "{\"message\": \"mock data\"}",
  "resource": "/{proxy+}",
  "path": "/path/to/resource",
  "httpMethod": "POST",
  "isBase64Encoded": false,
  "queryStringParameters": {
    "users": 200
  },

现在,我可以知道如何从 AWS API Gateway 控制台传递相同的 QueryStringParameters。目前,我在 API Gateway 的 AWS 控制台上收到此 500 错误:-

{
  "message": "Internal server error"
}

Mon Sep 28 01:24:15 UTC 2020 : Endpoint response headers: {Date=Mon, 28 Sep 2020 01:24:15 GMT, Content-Type=application/json, Content-Length=2, Connection=keep-alive, x-amzn-RequestId=0e1f110c-e80c-4ff1-870a-5cafd04167db, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5f713b3d-4762f9b07ee8c1d7c6623574;sampled=0}
Mon Sep 28 01:24:15 UTC 2020 : Endpoint response body before transformations: {}
Mon Sep 28 01:24:15 UTC 2020 : Execution failed due to configuration error: Output mapping refers to an invalid method response: 200
Mon Sep 28 01:24:15 UTC 2020 : Method completed with status: 500

我已执行以下步骤来缓解此问题,但无法正常工作。好像少了点什么:- 1)在方法请求中添加url查询字符串参数作为用户(参考截图)

  1. 在集成请求 -> 映射模板中,将映射添加为 application/json:-

    { "users": "$input.params('users')" }

  1. 最后将查询字符串作为 users=6 传递。

【问题讨论】:

    标签: amazon-web-services aws-api-gateway querystringparameter


    【解决方案1】:

    在您的情况下,event 应该是:

    {
        "users": "6"
    }
    

    您可以在处理程序的开头添加以下内容以确认:

      console.log(JSON.stringify(event, null, 2));
    

    因此,要获得users 值,您应该只使用event.users,而不是event.queryStringParameters.users

    【讨论】:

    • 这是代码级别的更改。在传递用户及其映射时,我是否需要在 API Gateway 的 AWS 控制台上进行任何更改。因为部署了最新代码(根据您的建议),我仍然收到 500 错误。从 API Gateway 控制台传递参数时要进行任何更改吗?请指教,谢谢
    • @vinod827 据我所知,没有其他要求了。但是我认为如果您担心代码更改会有些混乱。您正在测试和开发的原始 event 用于 lambda proxy 集成。但是您的 API 用于非代理集成。我根据这封信作了答复。我认为您必须决定使用哪种集成,因为您在问题中同时使用这两种集成,这就是您遇到这些问题的原因。顺便说一句,代理集成要容易得多,而且大多数人出于这个原因使用它。
    • @vinod827 另外,您是否使用console.log 打印出事件?您可以在 CloudWatch 日志中查看其形式,以确认其真实形式和内容。