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

如何编写C#代码灵活处理任意层级的AWS GetParametersByPathRequest路径

解决AWS SSM GetParametersByPath无法获取上层路径下所有子参数的问题

核心修改点

要让方法支持任意层级路径的参数查询,需要做两个关键调整:

  • 开启递归查询开关,让API遍历指定路径下的所有子层级
  • 处理API的分页返回逻辑,确保获取所有参数(单次调用最多返回100个参数)

修改后的异步实现(推荐,适配Lambda异步环境)

private async Task<List<Parameter>> GetMyAppAWSParametersAsync(string path)
{
    var allParameters = new List<Parameter>();
    string nextToken = null;

    do
    {
        var request = new GetParametersByPathRequest()
        {
            Path = EnsureTrailingSlash(path),
            WithDecryption = false,
            Recursive = true, // 开启递归查询所有子层级参数
            NextToken = nextToken
        };

        var response = await _ssm.GetParametersByPathAsync(request);
        allParameters.AddRange(response.Parameters);
        nextToken = response.NextToken;

    } while (!string.IsNullOrEmpty(nextToken));

    return allParameters;
}

// 辅助方法:统一路径格式,确保以斜杠结尾
private string EnsureTrailingSlash(string path)
{
    if (string.IsNullOrEmpty(path))
        return "/";
    return path.EndsWith("/") ? path : path + "/";
}

同步实现(若需保持原有方法同步风格)

private List<Parameter> GetMyAppAWSParameters(string path)
{
    var allParameters = new List<Parameter>();
    string nextToken = null;

    do
    {
        var request = new GetParametersByPathRequest()
        {
            Path = EnsureTrailingSlash(path),
            WithDecryption = false,
            Recursive = true,
            NextToken = nextToken
        };

        var response = _ssm.GetParametersByPathAsync(request).GetAwaiter().GetResult();
        allParameters.AddRange(response.Parameters);
        nextToken = response.NextToken;

    } while (!string.IsNullOrEmpty(nextToken));

    return allParameters;
}

private string EnsureTrailingSlash(string path)
{
    if (string.IsNullOrEmpty(path))
        return "/";
    return path.EndsWith("/") ? path : path + "/";
}

关键说明

  1. Recursive = true:默认情况下GetParametersByPath仅返回指定路径的直接子参数,开启该参数后会递归遍历所有嵌套层级的参数,例如传入/bible/NewTestament/时会返回Gospel下Mark、John的所有Chapter参数。
  2. 分页处理:AWS SSM API单次调用最多返回100个参数,若参数数量超过限制会返回NextToken,循环调用直到NextToken为空才能获取完整参数列表。
  3. 路径格式统一:辅助方法EnsureTrailingSlash避免因路径是否以/结尾导致的查询差异,保证输入路径格式的一致性。
  4. 异步优化:用await或.GetAwaiter().GetResult()替代原代码的.Result,避免Lambda环境中潜在的线程死锁问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:18:26