c# - Cognito ListUsers 永远持续下去

标签 c# amazon-web-services amazon-cognito

嘿,我编写了一些代码来下载 Cognito 用户池中的所有用户,但它似乎会永远持续下去。我很确定我正确使用了分页标记。 Cognito 的 UI 估计我有大约 10,000 个用户,但是我在循环中放置了一个断点分钟,而我的 List 有超过 50,000 个用户,这是没有意义的。

非常感谢您的帮助!

        using (AmazonCognitoIdentityProviderClient provider = AuthorizedClient())
        {
            try
            {
                List<UserType> users = new List<UserType>();
                bool continueListing = true;

                ListUsersResponse response = provider.ListUsers(
                    new ListUsersRequest
                    {
                        UserPoolId = UserPoolId,
                        Limit = 60,
                        AttributesToGet = new List<string>
                        {
                            "email"
                        }
                    });

                users.AddRange(response.Users);
                string paginationToken = response.PaginationToken;
                while (continueListing)
                {
                    response = provider.ListUsers(
                        new ListUsersRequest
                        {
                            UserPoolId = UserPoolId,
                            Limit = 60,
                            PaginationToken = paginationToken,
                            AttributesToGet = new List<string>
                            {
                                "email"
                            }
                        });

                    if (response.Users.Count < 60)
                    {
                        continueListing = false;
                    }
                    else
                    {
                        paginationToken = response.PaginationToken;
                        users.AddRange(response.Users);
                    }
                }

                return users;
            }
            catch (Exception)
            {
                //_session.NotifyUser(Notification.GeneralError());
                //_logger.LogError(e.Message);
            }

            return null;
        }

最佳答案

我最终使用速率门让它工作。我认为当你的垃圾邮件请求在 HTTP 世界中变得困惑时,你就会开始得到有趣的响应。无论如何,如果每秒超过 5 次 ListUsers API 调用,您将得到一个 RateExceedException,并且无论如何它都不会工作,所以无论如何我都需要一个速率门。

这是我使用的“RateGate”,效果非常好。我只是将其设置为将循环限制为每秒 4 次迭代(比最大值少 1 次)。

https://github.com/Danthar/RateLimiting

关于c# - Cognito ListUsers 永远持续下去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882193/

相关文章:

json - 需要地址的 AWS Cognito NEW_PASSWORD_REQUIRED 挑战,但它似乎不接受任何形式的地址类型

amazon-web-services - AWS Cognito API 身份验证流程 SDK

c# - 重载解析选择不兼容的泛型方法而不是兼容的基类方法

amazon-web-services - 如何运行适用于 MacOS 的 EC2 Classic Resource Finder 脚本并为该脚本创建适当的 IAM 用户?

java - 无法从 AWS EC2 发送 SMTP 邮件

java - AWS 无法验证提供的访问凭证(eclipse)

Android:用户登录 Amazon cognito 并在 Amazon S3 之间传输数据

c# - 我的 Tile 创建和加载有什么问题?

java - 函数分类方法 : Switch-case, 或字典哪个更好?

C# 全局热键在第一次最小化到托盘时不起作用,但在显示并再次最小化后它可以工作