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

使用 HTTP 代理访问 AWS API Gateway 中的标头?

AWS API Gateway - Lambda 代理(集成请求) - 内部服务器错误