【问题标题】:How to pass multi value query string parameter to lambda on api gateway?如何将多值查询字符串参数传递给 api 网关上的 lambda?
【发布时间】:2020-09-23 21:07:15
【问题描述】:

我正在使用带有 lambda 的 aws 集成 API 网关,并且我有数据映射模板。 带有查询的网址就像

https://example.com/query?value1=val1&value1=val2&value1=val3

我正在尝试将所有这些参数传递给 lambda,但没有运气 - 只传递了最后一个值。这是数据映射模板的一部分。

            "queryStringParameters": {
              #foreach($queryParam in $input.params().querystring.keySet())
              "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
              #end
            },

我知道在 aws 代理集成中有 multivaluequerystringparameters 但没有运气使用数据映射模板找到它们。 这是测试结果:

Method request query string: {value1=[val1,val2,val3]}
Endpoint request body after transformations: "queryStringParameters": {"value1": "val3"}

尝试使用 #foreach 像在 VTL 中那样迭代该参数,但也没有运气

【问题讨论】:

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


    【解决方案1】:

    经过大量的文档搜索和尝试,我只是在映射模板中写了这个(幸运...):

        "multiValueQueryStringParameters": {
          #foreach($key in $method.request.multivaluequerystring.keySet())
          "$key" : [
            #foreach($val in $method.request.multivaluequerystring.get($key))
           "$val"#if($foreach.hasNext),#end
            #end
            ]#if($foreach.hasNext),#end
          #end
        },
    

    无需在方法和集成部分定义任何查询参数名称。

    【讨论】:

      【解决方案2】:

      所以...我有两种方法,将我的参数发送为

      &value1=[1,2,3]
      

      或使用 aws_proxy 并从事件中访问此 value1

      multiValueQueryStringParameters
      

      我选择了最后一个。

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        相关资源
        最近更新 更多