You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS API Gateway Mock集成动态状态码配置HTTP 500错误排查

解决AWS API Gateway Mock API返回请求头值时的500错误

首先咱们直击问题核心:你遇到的Execution failed due to configuration error: Output mapping refers to an invalid method response: $input.params('Moc...错误,本质是集成响应的输出映射要么关联了未定义的方法响应状态码,要么$input.params的语法使用有误,或者Swagger的配置结构没对齐。下面是一步步的排查和修复方案:

1. 先确保Swagger里正确定义了方法响应(Method Responses)

Mock集成的响应必须和你在responses节点下定义的方法响应状态码严格对应。比如你要返回200,就必须明确在方法层级的responses里声明200的响应规则。

给你一个正确的基础配置示例:

swagger: '2.0'
info:
  title: Mock Header Echo API
  version: '1.0'
paths:
  /echo-header:
    get:
      # 必须先定义方法响应的状态码
      responses:
        '200':
          description: Success response
          # 如果需要返回自定义响应头,这里也要提前声明,不需要的话可以省略
          headers:
            X-Echoed-Header:
              type: string
      x-amazon-apigateway-integration:
        type: mock
        # Mock集成必须的请求模板,指定要触发的状态码
        requestTemplates:
          application/json: |
            {"statusCode": 200}
        responses:
          default:
            # 这里的状态码必须和上面方法响应的200完全匹配(注意是字符串格式)
            statusCode: '200'
            responseTemplates:
              application/json: |
                # 正确使用$input.params获取请求头的写法
                {"echoedHeader": "$input.params('My-Custom-Header')"}

2. 检查$input.params的语法是否正确

获取请求头的语法有两种常用写法,别写错了:

  • 直接通过头名称获取:$input.params('Header-Name'),注意API Gateway会自动把请求头转为小写,但用原始名称也能匹配,不过保险起见可以用全小写的头名。
  • 更严谨的写法:$input.params().header.get('header-name'),比如获取小写的my-custom-header:
    {"echoedHeader": "$input.params().header.get('my-custom-header')"}
    

如果语法写错(比如少引号、括号不闭合),API Gateway无法解析模板,也会触发"无效方法响应"的错误。

3. 确保集成响应与方法响应的状态码完全匹配

比如你在方法响应里定义的是字符串格式的'200',集成响应里的statusCode也要用'200',别用数字200(虽然部分场景兼容,但严格遵循规范能避免很多坑)。

另外,如果你用default作为集成响应的匹配键,它会兜底处理所有请求,但必须对应一个已经在方法响应里定义过的状态码。

4. 排查容易遗漏的配置细节

  • 别忘了在requestTemplates里写{"statusCode": 200},这是Mock集成的必填项,用来告诉API Gateway要触发哪个状态的响应。
  • 如果需要把请求头作为响应头返回,必须先在方法响应的headers里声明,再在集成响应的responseParameters里映射,比如:
    responses:
      default:
        statusCode: '200'
        responseParameters:
          method.response.header.X-Echoed-Header: "$input.params('My-Custom-Header')"
        responseTemplates:
          application/json: |
            {"message": "Header echoed successfully"}
    

快速验证修复效果

你可以用API Gateway控制台的"测试"功能,发送一个带自定义头的请求(比如My-Custom-Header: test-value),如果配置正确,应该会返回包含test-value的200响应。


内容的提问来源于stack exchange,提问作者KrimblKrum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:16:44