如何在Integration Request(AWS APIGateway)中对unescape请求路径

时间:2017-08-17 02:36:56

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

我正在使用AWS APIGateway,Lambda和RDS在Swift 3中编写移动应用程序。在POST方法中,我在身体的一个元素中传递唯一标识符,例如:

我们 - 东 - 1:XXXXXXXX-55b0-4917-82e3-85b3b093fa9c

但是,在GET方法中,我使用请求路径来检索此用户记录并传递此值。但是,我猜测它已被编码,因为它是一个请求路径,结果是:

我们 - 东 - 1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c

一旦它以这种方式击中Lambda(和我的RDS),由于冒号的逃逸,它将找不到记录。因此,我可以" unescape" “积分请求”模板中的此值?

我尝试了一个模板,例如:

#set($inputRoot = $input.path('$'))
{
    "user_identity" : "$util.decodeURIComponent($input.params('useridentity'))"
}

但是,这不起作用。我在日志中得到以下内容:

Thu Aug 17 02:32:47 UTC 2017 : HTTP Method: GET, Resource Path: /user/us-east-1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c
Thu Aug 17 02:32:47 UTC 2017 : Endpoint request body after transformations: {
   "user_identity" : ""
}

我也尝试过使用decodeURI,但这给了我相同的结果。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

荡!在我发布这个帖子后几分钟,我确实找到了答案。这是解决方案:

#set($inputRoot = $input.path('$'))
{
    "user_identity" : "$util.urlDecode($input.params('useridentity'))"
}

urlDecode函数可以解决问题。我希望这可以帮助别人!!