尝试解决Twilio 12300错误:使用AWS的API网关(GET)和CloudFormation通过 aws cli
和Swagger部署Lambda(无服务器)应用程序时导致的内容类型无效 .
我将集成响应主体映射模板> Content-Type设置为 application/xml
和模板
#set($inputRoot = $input.path('S'))
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Message>
<Body>
$inputRoot
</Body>
</Message>
</Response>
检查Twilio日志中的实际Response Body,输出与模板匹配,返回格式正确的XML响应 .
但是,响应 Headers > Content-Type仍返回 application/json
.
似乎这需要在Method Response中进行设置更改,但AWS API Gateway仪表板和/或Swagger API不允许我将Header> Content-Type设置为 application/xml
.
下面是 swagger.yaml
文件
---
swagger: "2.0"
info:
version: "2016-12-20T18:27:47Z"
title: "twilio-apigateway"
basePath: "/Prod"
schemes:
- "https"
paths:
/addphoto:
get:
consumes:
- "application/json"
produces:
- "application/xml"
responses:
200:
description: "200 response"
x-amazon-apigateway-integration:
responses:
default:
statusCode: "200"
responseTemplates:
application/xml: "#set($inputRoot = $input.path('$'))\n<?xml version=\"\
1.0\" encoding=\"UTF-8\"?>\n<Response>\n <Message>\n <Body>\n\
\ $inputRoot\n </Body>\n </Message>\n</Response> "
requestTemplates:
application/json: "{\n \"body\" : \"$input.params('Body')\",\n \"\
fromNumber\" : \"$input.params('From')\",\n \"image\" : \"$input.params('MediaUrl0')\"\
,\n \"numMedia\" : \"$input.params('NumMedia')\"\n}"
# NOTE: Replace <<region>> and <<account>> fields
uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:<<cccount_id>>:function:${stageVariables.LambdaFunctionName}/invocations
passthroughBehavior: "when_no_templates"
httpMethod: "POST"
contentHandling: "CONVERT_TO_TEXT"
type: "aws"
在解决这个问题的任何人都会喜欢这里的帮助 . 虽然这似乎是一个已知问题(Twilio需要XML格式),并且AWS Swagger API在某些方面受到限制,这可能导致无法解析的状态 .
其他参考:
http://boto3.readthedocs.io/en/latest/reference/services/apigateway.html
1 回答
您是否尝试过方法响应和集成响应?