【发布时间】:2020-12-10 04:05:55
【问题描述】:
我正在尝试通过获取 10 个最近创建或具有特定字符的特定用户来测试我的代码。我的代码基于这个。此代码来自 Dan。 Changing passwordFormat from Encrypted to Hashed
void HashAllPasswords()
{
var clearProvider = Membership.Providers["SqlProvider_Clear"];
var hashedProvider = Membership.Providers["SqlProvider_Hashed"];
int dontCare = 2;
if (clearProvider == null || hashedProvider == null) return;
var passwords = encrypted.GetAllUsers(0, int.MaxValue, out dontCare)
.Cast<MembershipUser>().Where(u => u.IsLockedOut == false && u.IsApproved == true).OrderByDescending(u => u.CreationDate).ToDictionary(u => u.UserName, u => u.GetPassword());
using (var conn = new SqlConnection(
ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
conn.Open();
using (var cmd = new SqlCommand(
"UPDATE [aspnet_Membership] SET [PasswordFormat]=1", conn))
cmd.ExecuteNonQuery();
}
var count = 0;
foreach (var entry in passwords)
{
var resetPassword = hashedProvider.ResetPassword(entry.Key, null);
hashedProvider.ChangePassword(entry.Key, resetPassword, entry.Value);
count++;
if (count == 2)
break;
}
}
因此,基本上我不想更改所有用户,而是只想更改 10 个用户或 100 个用户,具体取决于我想要的数量。我也收到了一个错误
变量记录
它说
错误是
项目已添加。输入字典:'sample@email.com' 正在添加的密钥:'sample@email.com'。
有没有办法解决这个问题?也许我以错误的方式使用 linq。
【问题讨论】:
-
重要的是哪些用户或只是一些用户。是否还需要能够以字母开头(例如 i 和那么多用户)?
-
@IsaacMorris 有点类似于 sql 中的“like”。例如,只想获取名称中有“测试”的用户。或者在我循环他们并更改密码之前是否可以只获得固定数量的用户。约束基本上是如果它花费太长时间并且发生执行超时,因为它会获取所有数据。
标签: c# asp.net asp.net-membership