我在AWS API Gateway中有一个REST API,它可以在S3上获取json文件,并通过Lambda函数将它们返回给API Gateway。我在Lambda中实现了分页,每次只获取100个文件,并返回S3 Continuation Token(如果存在)。
我已经在API Gateway上创建了一个查询参数,用于将后续调用的延续令牌发送到S3,但API Gateway不会传递它,因为它的格式。
有效的S3令牌:17kqE73kRqN1CZ8LJHWui7rlHD7+SHZgFRVQ5gVJAyF90msNxKgc6LiqRgMzGg5HfIJZP/Dc0Zenf8q7Az93KYtfkcRKtwQ6RL8P4cjGyjR0=
1.当在Postman中直接使用它时,我得到一个“InvalidQueryStringException”错误(http400)
1.通过直接在Lambda中进行测试,我发现删除最后一个'='字符会在S3中产生相同的文件,并且不会抛出400错误,但'+'字符在APIG中被替换为空格,这使得令牌无效。
1.我也试过在Postman中用""
和''
Package 令牌,但没有成功。
1.通过提供完整令牌的测试函数直接在APIG中调用该方法,可以按预期工作。
我将continuation标记从urlMap到Lambda,如下所示:"continuationToken": "$input.params('continuationToken')",
关于如何让令牌正确通过API网关,有什么建议吗?
1条答案
按热度按时间zbdgwd5y1#
当将token作为查询字符串传递时,您需要对它进行urlencode,否则
=
将被视为RFC 3986中指定的参数分隔符(子组件分隔符)。正确编码的令牌将把转义的
=
呈现为%3D如果Lambda是用JS编写的,你可以这样编码这个token:
字符串