.NET Core中如何通过JObject向Lambda传递string[]参数
问题:如何通过JObject向Lambda传递string[]参数?
我需要将string[]类型的externalRateCardIds传入Lambda调用,但调用接口时提示未发送输入。当前代码如下:
JArray array = new JArray(); array.Add(externalRateCardIds); JObject queryParam = new JObject(); queryParam.Add("externalRateCardIds", array); var externalRateCardLambdaResponse = await _lambdaInvoker.InvokeLambdaWithResponseAsync( EnvironmentVariables.ApiLambdaLongName, $"/api/Bill/GetBillByExternalID", "get", new JObject(), queryParam);
解决方案
你当前代码的问题在于:直接把整个string[]对象作为单个元素添加到JArray中,生成的JSON是嵌套数组结构(比如[[ "id1", "id2" ]]),但Lambda接口期望的是扁平的字符串数组([ "id1", "id2" ]),导致接口无法识别有效输入。
可以通过两种方式修正:
方式一:遍历数组逐个添加元素
JArray array = new JArray(); foreach (var id in externalRateCardIds) { array.Add(id); } JObject queryParam = new JObject(); queryParam.Add("externalRateCardIds", array); var externalRateCardLambdaResponse = await _lambdaInvoker.InvokeLambdaWithResponseAsync( EnvironmentVariables.ApiLambdaLongName, $"/api/Bill/GetBillByExternalID", "get", new JObject(), queryParam);
方式二:用JArray.FromObject直接转换
这种方式更简洁,自动将string[]转换为对应结构的JArray:
JArray array = JArray.FromObject(externalRateCardIds); JObject queryParam = new JObject(); queryParam.Add("externalRateCardIds", array); var externalRateCardLambdaResponse = await _lambdaInvoker.InvokeLambdaWithResponseAsync( EnvironmentVariables.ApiLambdaLongName, $"/api/Bill/GetBillByExternalID", "get", new JObject(), queryParam);
额外注意:如果是GET请求,部分框架对URL数组参数的格式有特定要求(比如externalRateCardIds=id1&externalRateCardIds=id2或externalRateCardIds[]=id1&externalRateCardIds[]=id2),如果上述JSON方式仍不生效,可检查_lambdaInvoker是否能将queryParam的数组正确转换为符合要求的查询字符串,必要时手动拼接参数。
内容的提问来源于stack exchange,提问作者karthikeyan sivakumar
相关产品推荐
相关产品推荐

