我通过使用无服务器框架部署的lambda函数配置了API网关。我已经在yaml文件中定义了一些queryStringParameters为true。但是,即使在URL中未传递Required(强制)queryStringParams,请求也会通过该服务。 PFB类似的配置。
functions:
functionName:
name: serviceName
handler: handler.handle
events:
- http:
path: /path
method: get
request:
parameters:
querystrings:
param1: true
param2: true
似乎无服务器无法验证param1和param2是否作为queryString传递。我们应该有一个明确的请求验证器吗?是否可以使用无服务器?
答案 0 :(得分:0)
来这里只是为了寻找一个简单,直接的答案,并且不想按照“ {Request validation using serverless framework”中的建议添加插件。
如果根据需要设置参数并希望对其进行验证,则必须将请求验证器添加到您的 serverless.yml
Resources:
ParameterRequestValidator:
Type: AWS::ApiGateway::RequestValidator
Properties:
Name: ParameterRequestValidator
RestApiId:
Ref: ApiGatewayRestApi
ValidateRequestBody: false
ValidateRequestParameters: true
ApiGatewayMethodNameOfYourApiLookItUpInYourTemplate:
Properties:
RequestValidatorId:
Ref: ParameterRequestValidator
您要验证的方法将被命名为ApiGateway<Method><Get | Post | Patch | Put | Delete >:
。将无服务器功能打包到创建的模板文件中时,可以查找名称。
此解决方案的礼节到https://github.com/serverless/serverless/issues/5034#issuecomment-581832806
答案 1 :(得分:0)
对于像我一样也看不到的那些人。
这就是你需要用简单的英语做的事情。
打开
ApiGatewayMethodNameOfYourApiLookItUpInYourTemplate
到
APIGatewayMethod <1> <2>
就我而言,这是APIGatewayDealsGet
我正在查看的是我在无服务器中的处理程序名称
list:
# Defines an HTTP API endpoint that calls the main function in list.js
# - path: url path is /deals
# - method: GET request
handler: list.main
events:
- http:
path: deals
method: get
cors: true
authorizer: aws_iam
request:
parameters:
querystrings:
country: true
type: true
或者,如果这不起作用,请检查s3存储桶,将其命名为xxxxxxx-ap-serverlessdeploymentbuck-1epdp60eqveqr并转到无服务器> yyyyyyyyyyy> aaaa> 时间戳>编译后的cloudformation-template.json
然后在其中查找您的方法的名称,示例示例为:
"ApiGatewayMethodDealsGet": {
"Type": "AWS::ApiGateway::Method",
"Properties": {
"HttpMethod": "GET",
"RequestParameters": {