这类似于此帖子API-Gateway Integration Request HTTP Header not mapping query string to header,但我看不到任何答案,所有答案都与问题的意图无关。
我试图在API网关中添加集成请求参数,但是每当我将'Http Headers'as shown here和'Mapping template'设置为passthrough时,登录lambda时都看不到该标题。
在集成响应中,我也无法在集成头响应参数中引用它。当我调用API时,“ integration.response.header.cokers”将返回空白。 This is how I configured the integration response
答案 0 :(得分:0)
最终,这里的解决方案是实现lambda proxy integration。
API Gateway中的代理集成告诉API Gateway只需将所有标头转发到集成以进行处理,这意味着您将在lambda函数中看到所有这些值。
注意:如果Lambda是代理集成,则必须将特定的响应格式返回给API Gateway。最终,响应应该类似于:
{ 'statusCode': 200, 'headers': { 'echo-proxy': True }, 'body': 'some payload' }
您现在想要做的是手动映射所有内容,这是一种过时的方法,通常除非您绝对必须这样做,否则您就不想这样做,因为这很痛苦。
如果必须手动映射标头,则首先在方法请求中映射标头,以便可以继续进行下一步,依此类推。基本上是这样的:
方法请求->将变量映射到集成请求->将变量映射到主体映射模板->将变量映射到实际请求标头
您的集成请求-> HTTP标头的屏幕快照中的内容是:
名称:焦化者 映射自:“等等”
但是,“映射自”应类似于“ method.request.header.coker”,它是标准路径(表示从名称为“ coker”的“方法请求标头”字段中获取值)。
将焦化器标头添加到方法请求中之后,并且正确映射了集成请求HTTP标头,则必须实现映射模板。设置内容类型为application / json,并将passthrough设置为“当未定义模板时(推荐)”和一个简单的映射模板:
{ "headers": { "coker" : "$input.params('coker')" } }
这就是设置我的API的方式,它向我返回以下内容,因为我让我的lambda函数将事件作为json对象返回给API GW:
{"body": "{\"headers\": {\"coker\": \"mapped\"}}", "statusCode": 200}
注意:客户端请求中标头“ coker”的值已“映射”
更新后的答案
要将原始的“ coker”标头映射到“ coker2”(或您想要给它的任何其他名称),只需在映射模板中设置标头的名称,如下所示:
{ "headers": { "coker2" : "$input.params('coker')" } }
然后编辑您的lambda函数以返回“ coker2”标头,您应该得到如下响应:
{"body": "{\"headers\": {\"coker2\": \"mapped\"}}", "statusCode": 200}