You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从C#代码调用AWS Lambda时无法获取参数值的问题求助

解决API Gateway调用Lambda时参数无法传递的问题

问题出在API Gateway与Lambda的集成方式以及Lambda输入参数的解析逻辑不匹配上,下面分两种最常见的场景给出解决方案:

方案一:使用Lambda代理集成(推荐)

Lambda代理集成会将API Gateway的完整请求信息(包括请求体、Headers、查询参数等)封装成APIGatewayProxyRequest对象传递给Lambda,你需要在Lambda中解析请求体获取参数:

  1. 修改Lambda函数处理器,引入Amazon.Lambda.APIGatewayEvents包,并调整输入类型:
using Amazon.Lambda.APIGatewayEvents;
using Newtonsoft.Json;

public class RequestParams
{
    public int CompanyId { get; set; }
    public int ProjectId { get; set; }
}

public string FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{
    // 从请求体解析JSON参数
    RequestParams input = JsonConvert.DeserializeObject<RequestParams>(request.Body);

    Console.Write($"{input.CompanyId}/{input.ProjectId}");
    if (input.CompanyId == 0)
    {
        Console.WriteLine("Required Param companyId is missing");
        return "function execution aborted";
    }

    // 执行后续逻辑
    return "";
}
  1. 确保API Gateway配置为Lambda代理集成:

    • 在API Gateway的对应方法中,进入「集成请求」
    • 勾选「使用Lambda代理集成」,保存并重新部署API
  2. 调用端保持你第二种JSON请求的方式(已正确,无需修改):

HttpClient client = new HttpClient();

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.ExpectContinue = false;
client.Timeout = TimeSpan.FromMinutes(15);

var json = new JObject
{
    { "CompanyId", companyId },
    { "ProjectId", projectId }
};

var content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");
var response = client.PostAsync(awsGatewayUrl, content).Result;

方案二:使用非代理集成(需配置映射模板)

如果不想修改Lambda的输入类型,可以通过API Gateway的映射模板,将请求体字段直接映射到你的RequestParams对象:

  1. 在API Gateway的对应方法中,进入「集成请求」
    • 取消「使用Lambda代理集成」
    • 在「映射模板」部分,添加application/json的模板,内容如下:
{
  "CompanyId": "$input.json('$.CompanyId')",
  "ProjectId": "$input.json('$.ProjectId')"
}
  • 保存并重新部署API
  1. Lambda函数处理器保持你原有代码不变,调用端同样使用第二种JSON请求方式即可。

额外注意事项

  • 如果调用端想用FormUrlEncodedContent(表单格式)传递参数,需要在Lambda中从APIGatewayProxyRequest.Form集合中读取,而非解析请求体
  • 确保RequestParams类的属性名称与请求体中的字段名称完全一致(默认序列化规则大小写敏感)

内容的提问来源于stack exchange,提问作者maX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:35:02