amazon-web-services - 使用 POSTMan 调用 APIGateway 时不执行请求验证
问题描述
刚刚通过 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 文档中找不到任何内容
解决方案
回答我的问题-
问题在于请求中使用的标头 - Postman 默认 JSON 为Content-Type
of text/plain
,我必须使用 Body 选项卡中的下拉菜单切换到 JSON,以使 PostMan 将 Content-Type 设置为 application/json
关注这篇文章似乎已经解决了这个问题:https ://itnext.io/how-to-validate-http-requests-before-they-reach-lambda-2fff68bfe93b ,虽然它没有解释如何
显然,神奇之处在于配置在部分Content-Type
下添加 Header HTTP Request Headers
,即使application/json
在 PostMan 中正确设置了标题。
推荐阅读
- swift - 以编程方式访问 macOS Mojave 中的 Safari 书签
- rest - 使用动态分段构建休息请求
- css - 使用 CSS/SCSS 在页面上动画显示元素
- ghost-blog - 如何在 Ghost 框架中提供一个方便的链接到下一篇文章(博客)
- database - 如何使 MongoDb(本地数据库)也可以同时通过 Internet 访问
- php - 'MongoDB\Client' 或 'MongoDB\Driver\Manager("mongodb://localhost:27017")' 都不起作用
- imap - 收到 Gimap 准备好请求后出现 imap 错误
- sql - LEFT OUTER JOIN 中的最大行数是多少?
- c - 在 O(n) 运行时间内对数组元素求平方
- c# - 如何在 C# 中打开具有身份验证的文件夹?