AWS API Gateway 集成请求正文映射模板
Posted
技术标签:
【中文标题】AWS API Gateway 集成请求正文映射模板【英文标题】:AWS API Gateway integration request body mapping template 【发布时间】:2018-01-20 10:53:00 【问题描述】:我在 Web 应用程序中使用 AWS API 和 Cognito 安全身份验证。当我在不覆盖集成请求正文映射模板的情况下调用我的 api 时,它工作正常。但是当我在集成请求正文映射模板中放入以下几行时 如下所示
#set($inputRoot = $input.path('$'))
'UserId' :'$context.authorizer.claims.email',
'Name' :'$context.authorizer.claims.name',
'UniqueID' :'$context.authorizer.claims.sub'
…它给了我以下错误:
XMLHttpRequest 无法加载 https://ei25XXXXXXg.execute-api.us-east-2.amazonaws.com/Development/userlogin/getcurrentuser。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:7080” 使用权。响应的 HTTP 状态代码为 400。
但我已经将“Access-Control-Allow-Origin”启用为“*”。有人知道吗..?
【问题讨论】:
【参考方案1】:问题中引用的消息中的“响应的 HTTP 状态代码为 400” 表明服务器认为请求有问题并拒绝按预期响应。
所以你可能想要:
仔细检查请求以确保您没有犯任何语法错误或其他任何错误 测试来自其他一些非浏览器客户端/工具(例如 curl 或 postman)的相同请求 在服务器端检查您的服务器日志,以查看服务器正在记录哪些消息以指示请求有什么问题您在浏览器控制台中收到一条消息说“请求的资源上不存在'Access-Control-Allow-Origin'标头”这一事实只是偶然的——真正的问题是你一开始没有得到 200 OK 响应,而是得到了 400。
问题是,大多数服务器,即使配置为在响应中发送正确的 CORS 标头,通常也只为 success 响应发送这些标头,而不是为诸如 400 之类的错误响应发送这些标头。
【讨论】:
在我将 json 字符串与上下文一起放置后,它会给我带来错误。没有它,它工作正常。我上面提到的那个json请求有什么问题吗? 您是否使用Content-Type: application/json
请求标头发送它?以上是关于AWS API Gateway 集成请求正文映射模板的主要内容,如果未能解决你的问题,请参考以下文章
AWS API Gateway - 如何在正文映射模板中获取日期/时间戳/纪元?
HTTP 请求正文未通过 AWS API Gateway 访问 AWS lambda 函数
AWS API Gateway按标头信息调用Lambda版本
AWS API Gateway 集成请求 Http 标头未传递给 lambda