我有一个python lambda函数和一个API Gateway Lambda Proxy集成。
python代码返回:
{
"statusCode": str(code),
"body": error if error else result.format(**event),
"headers": {
"Content-Type": "application/json",
**kwargs,
}
}
API网关中的响应如下:
Endpoint response body before transformations:
{
"statusCode": "200",
"body": "Some text.",
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true,
"kwarg": "foo"
}
}
Mon May 25 20:18:44 UTC 2020:方法响应标头:{Content-Type = application / json,Access-Control-Allow-Origin = *,Access-Control-Allow-Credentials = true,密码= 1 ,X-Amzn-Trace-Id = Root = 1-5ecc2824-c55ec6e1dc79ba1417361345; Sampled = 0}
但是,对应用程序的响应在到达客户端时会丢失所有标头。客户端反而收到:
{
"data":"Some text.",
"status":200,
"statusText":"",
"headers":{
"content-length":"10",
"content-type":"application/json"
},
"config":{
"method":"GET",
"headers":{
"Content-Type":"application/json",
"Accept":"application/json"
},
"timeout":0,
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"https://something.execute-api.region.amazonaws.com/test/page?foo=bar",
"data":""
}
}
我需要更改什么?
预先感谢您的帮助。
答案 0 :(得分:0)
事实证明,不需要代理请求,我需要映射模板:
#set($allParams = $input.params())
{
"custom-parameters" : $input.json('$'),
"params" : {
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
}
}
关于回应。然后,我不得不查看result["data"]["custom-parameters"]["headers"]
来找到kwarg。
我希望这可以帮助其他有类似问题的人。