嘿,我编写了一些代码来下载 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 次)。
关于c# - Cognito ListUsers 永远持续下去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882193/