【发布时间】:2019-05-26 15:47:38
【问题描述】:
我有带有 2 个查询字符串参数的 AWS Gateway REST API
https://xxxxxx.xxxx.us-east-1.amazonaws.com/dev/pets?type=dog&page=1
API 的调用者还在标头中包含x-api-key。我希望 API 网关将查询字符串参数和 x-api-key 传递给 lambda 函数。所以在AWS API Gateway Console 我已经配置了Integration Request 如下
lambda 函数如下所示
namespace AWSLambda1
{
public class Function
{
public string FunctionHandler(LambdaRequest request, ILambdaContext context)
{
return string.Format("{0},{1},{2}", request.Type, request.Page, request.ApiKey);
}
}
}
public class LambdaRequest
{
public string Type { get; set; }
public string Page { get; set; }
public string ApiKey { get; set; }
}
问题
1> 当 lambda 函数接收到请求时,Type 和 Page 属性为 NULL。
2>根据文档 API Gateway 可以使用命名约定 method.request.header.{param_name} 映射 http 标头,但是当我尝试将映射设置为 method.request.header.x-api-key 时,它会引发错误
指定的映射表达式无效:验证结果:警告: [],错误:[指定的映射表达式参数无效: method.request.header.x-api-key]
我不确定如何将这些查询字符串和标头映射到 C# lambda 对象
(请注意,我已经通过 SO post 建议将 JObject 作为 lambda 函数的参数。但它仅适用于我在 Integration Request 中启用 Use Lambda Proxy integration。在这种情况下 API 网关将所有信息传递给 lambda。这可能对我有用,但我试图避免将不需要的信息传递给 lambda 函数)
【问题讨论】:
-
首先,您需要确保标头映射到
Method Request,然后您可以映射到Integration Request。发生错误是因为您没有映射到Method Request部分,而是尝试在Integration Request中配置它。
标签: amazon-web-services aws-lambda aws-api-gateway