当前位置: 首页 > 知识库问答 >
问题:

如何将查询字符串值从AWS API网关传递到Lambda C#函数

白子昂
2023-03-14

我有一个C#方法,我已经成功地发布为AWS Lambda函数。它看起来像这样:

public class MyClass
{
    public async Task<APIGatewayProxyResponse> Test(APIGatewayProxyRequest request, ILambdaContext context)
    {
        return new APIGatewayProxyResponse
        {
            Body = "Body: " + request.Body
                   + Environment.NewLine
                   + "Querystring: " + (request.QueryStringParameters == null ? "null" : string.Join(",", request.QueryStringParameters.Keys)),
            StatusCode = 200
        };
    }
}

我已通过web界面执行以下操作来配置API网关:

  1. 创建了新的API
  2. 创建了一个名为“myclass”且路径为“/myclass”的新资源
  3. 为资源创建了一个新的GET方法,使用“Lambda函数”作为集成类型,并指向我的Lambda函数

我希望能够像这样调用Lambda函数(无需在请求中传递任何指定的头):https://xxx.execute-api.us-east-2.amazonaws.com/prod/myclass?paramA=valueA

我不确定如何将查询字符串参数传递到lambda函数。无论我尝试什么,请求。QueryStringParameters始终为空。

从这里开始正确的程序是什么?

共有3个答案

曾云
2023-03-14

请使用“$input.params('YourQueryStringKey')”。

您可以在API网关集成响应中创建主体映射模板并尝试“$input.params('YourQueryStringKey')”,也可以直接在Lambda函数中尝试。

长孙智刚
2023-03-14

好的,我已经解决了问题。

APIGatewayProxyRequest是从传递给Lambda函数的JSON反序列化的对象。如果接受JObject作为第一个参数,则可以看到传递给Lambda函数的原始JSON:

public async Task<APIGatewayProxyResponse> Test(JObject request, ILambdaContext context)
{
    return new APIGatewayProxyResponse
    {
        Body = request.ToString(),
        StatusCode = 200
    };
}

因此,为了填充APIGatewayProxyRequest,主体映射模板中指定的JSON需要匹配APIGatewayProxyRequest的属性。这里有一个模式示例(尽管它没有显示您需要的实际模板):https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-lambda输入格式的网关简单代理

但是,使用APIGatewayProxyRequest实际上并不是必需的。只接受JObject作为Lambda函数的第一个参数更容易,然后您就可以访问所需的任何JSON。然后,您可以使用Vaibs回答中描述的技术。

凤柏
2023-03-14

您需要为请求配置url查询字符串参数。

>

  • 转到API网关

    单击适当的方法,即GET方法

    转到方法执行

    在方法执行中,选择URL查询字符串参数。

    添加查询字符串参数,如参数A,参数B

    现在转到集成请求选项卡

    选择主体映射模板,内容类型为application/json

    生成模板,如下所示

    {
     "paramA":  "$input.params('paramA')",
     "paramB":  "$input.params('paramB')"
    }
    

    在lamda函数中成对接受此键值。

    希望这将是有帮助的。

  •  类似资料:
    • 我是aws lambda和api网关的新手,我正在尝试向lambda函数传递一个json字符串。 但是,lambda不是用字符串调用的。 这是lambda。它获取一个对象作为输入,并返回类的字符串表示形式和对象的值。 api网关的映射模板是 api网关测试中的日志显示: 我希望json字符串被传递给lambda(作为字符串对象),但是TestMapping lambda返回的不是这个 如您所见,L

    • 问题内容: 是否存在通过查询字符串传递数组的标准方法? 需要明确的是,我有一个带有多个值的查询字符串,其中一个是数组值。我希望将该查询字符串值视为一个数组-我不希望该数组爆炸,以使其与其他查询字符串变量没有区别。 编辑: 根据@Alex的答案,没有标准的方法可以执行此操作,因此我的后续工作是什么才是 识别 我正在读取的参数同时是 PHP 和 Javascript 数组的简单方法? 用相同的名称命名

    • 问题内容: 背景: 我创建了一个非常简单的前端,用户可以在其中输入字符串。输入并单击“检查”按钮后,我想将此字符串作为JSON传递给python字符串,它将在其中进行SQL查找。根据SQL外观,python脚本应传递一个布尔值,该值应更改?到✔或✘。 题: 一旦按下“检查”按钮作为JSON到Python脚本,然后如何将字符串从Python传递到HTML,将?更改为✔或✘,如何传递字符串? 研究:

    • 我们已经使用ms bot框架创建了一个bot,并希望向bot传递一些用户不会输入的数据。就像我在想,我们是否可以将查询字符串传递到下面的web频道。 https://webchat.botframework.com/embed/myformbot?s=XXXXXX 从bot api代码中,我可以以某种方式读取这个querystring参数。。。理想情况下,我知道我们不能控制上面的webchat链接

    • 问题内容: 我在应用程序中有4个这样的字符串,我想传递给我的js文件 而我的javascript代码是 我只能得到$ a4字符串,而我不能得到其他字符串 我如何在php中传递这4个字符串并在javascript中设置这4个变量 谢谢; 问题答案: 将它们编码为JSON。 在PHP方面: 在JavaScript方面: 如果你想,,,并且是数字,而不是包含数字的字符串数组,只是JSON在发送之前解码在