首页 文章

无法将方法响应标头Content-Type更改为application / xml

提问于
浏览
0

尝试解决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://docs.aws.amazon.com/fr_fr/apigateway/latest/developerguide/api-gateway-swagger-extensions.html

http://boto3.readthedocs.io/en/latest/reference/services/apigateway.html

1 回答

  • 3

    您是否尝试过方法响应和集成响应?

    "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            },
            "headers": {
              "Content-Type": {
                "type": "string"
              }
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "responses": {
            "default": {
              "statusCode": "200",
              "responseParameters": {
                "method.response.header.Content-Type": "'application/xml'"
              }
            }
        }
    

相关问题