【问题标题】:AWS API Gateway get request query params with '+' sign not workingAWS API Gateway 获取带有“+”号的请求查询参数不起作用
【发布时间】:2017-03-07 00:01:36
【问题描述】:

我已经在 API Gateway 中实现了 GET 请求并且它工作正常,但是今天我得到了一个带有“+”号的名字,所以有人知道 .../score?team=name+with +sign..../score?team-with-dashes 工作得很好的地方不起作用。 请求的内容类型为application/json。

这是身体映射模板(应用程序/json)

{
  "body" : $input.json('$'),
  "headers": {
    #foreach($header in $input.params().header.keySet())
      "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end
    #end
  },
  "method": "$context.httpMethod",
  "params": {
    #foreach($param in $input.params().path.keySet())
      "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
    #end
  },
  "query": {
    #foreach($queryParam in $input.params().querystring.keySet())
      "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
    #end
  }  
}

这是否与 URL 查询字符串参数或其他有关?

【问题讨论】:

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


    【解决方案1】:

    查询参数中的+ 字符是一个特殊字符。它是空格 字符的替换字符。

    所以如果客户端打算发送.../score?team=name with spaces,那么客户端可以将URL编码为.../score?team=name+with+spaces。它也可以将其编码为.../score?team=name%20with%20spaces

    这意味着在服务器端,参数应该是未编码的,+ 转换回空格。

    如果您确实希望在查询参数值中包含+ 字符,则必须将其编码为%2B,例如.../score?team=name%2Bwith%2Bsign

    【讨论】:

    • 如果我使用 %2B 那么它会给我服务器未找到页面。
    • 完整的 URL 包含一些客户的信息,因为它是由我们的服务器生成的,所以我不能在这里分享。让我创建一个临时用户,然后我可以分享。
    • 不知道为什么会这样,但是当我对 url 进行编码时,api url 会从 1xahqjj3ub 更改为 1x1xahqjj3ub 在 url 的开头添加“1x”,这就是为什么我我正在获取找不到服务器的页面。
    • 不要对整个 URL 进行编码。相反,在将值添加到 URL 之前对每个参数值进行编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2018-10-29
    • 2016-07-02
    相关资源
    最近更新 更多