【问题标题】:APIGateway does not perform request validation when called using POSTMan使用 POSTMan 调用 APIGateway 时不执行请求验证
【发布时间】:2021-07-11 13:13:38
【问题描述】:

刚刚通过 AWS 学习 - 我有一个带有 Lambda 代理集成的 APIGateway REST API 设置。 API 定义了一个模型,并使用此模型在正文上请求验证设置。

说模型是

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "propertyA": {
            "type": "string"
        },
        "propertyB": {
            "type": "string"
        },
        "propertyC": {
            "type": "string"
        },
        "propertyD": {
            "type": "string"
        }
    },
    "required": ["propertyA", "propertyB", "propertyC", "propertyD"]
}

现在,如果我通过 APIGateway 控制台测试 API,并故意提供无效输入(省略必需的属性 propertyD):

{
    "propertyA": "valueA",
    "propertyB": "valueB",
    "propertyC": "valueC"
}

请求失败并出现错误(400):Sun Jul 11 13:07:07 UTC 2021 : Request body does not match model schema for content type application/json: [object has missing required properties (["propertyD"])]

但是当我使用来自 Postman 的相同无效输入调用相同的 API(和阶段)时,验证似乎没有发生,并且请求被代理到 Lambda,只要我注释掉它甚至返回 200 OK部分代码依赖于propertyD

这里有什么不同?我应该从客户端传递任何请求标头吗?我在 AWS 文档中找不到任何内容

【问题讨论】:

    标签: amazon-web-services aws-api-gateway


    【解决方案1】:

    回答我的问题-

    问题在于请求中使用的标头 - Postman 默认 JSON 为 text/plainContent-Type,我必须使用 Body 选项卡中的下拉菜单切换到 JSON 以使 PostMan 将 Content-Type 设置为 application/ json

    关注这个帖子似乎已经解决了这个问题:https://itnext.io/how-to-validate-http-requests-before-they-reach-lambda-2fff68bfe93b,虽然它没有解释如何

    显然,神奇之处在于配置在 HTTP Request Headers 部分下添加 Content-Type 标头,即使标头在 PostMan 中正确设置为 application/json

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2015-11-25
      相关资源
      最近更新 更多