C# ASP.Net角色-RemoveUserFromRole-删除角色时出错
给出这段代码。。。(C# ASP.Net角色-RemoveUserFromRole-删除角色时出错,c#,asp.net,.net,roles,C#,Asp.net,.net,Roles,给出这段代码。。。(role和userName是传入的字符串) 我得到以下错误: 用户“xxx”已不是角色“yyy” 这有点神秘,因为我刚刚获取了用户的角色,并检查了要删除的角色是否存在。。。。有什么线索可以让它正常工作吗?这难道不是一个多线程问题吗?你有没有试过用锁块把代码围起来?如果在foreach循环中使用Roles.IsUserInRole(用户名,角色)检查角色是否存在,会发生什么 我会尝试用这样的代码调试它,看看会发生什么 string[] existingRoles
role
和userName
是传入的字符串)
我得到以下错误:
用户“xxx”已不是角色“yyy”
这有点神秘,因为我刚刚获取了用户的角色,并检查了要删除的角色是否存在。。。。有什么线索可以让它正常工作吗?这难道不是一个多线程问题吗?你有没有试过用锁块把代码围起来?如果在foreach循环中使用Roles.IsUserInRole(用户名,角色)检查角色是否存在,会发生什么 我会尝试用这样的代码调试它,看看会发生什么
string[] existingRoles = Roles.GetRolesForUser(userName);
foreach (string role in existingRoles)
{
if (!newRoles.Contains(role))
{
Authentication.AuthTraceStatic("Removing user {0} from role: {1}", userName, role);
lock(o)
{
if(Roles.IsUserInRole(userName, role))
Roles.RemoveUserFromRole(userName, role);
else
Authentication.AuthTraceStatic("Somebody is messing with my roles!!", userName, role);
}
}
}
首先检查用户名的上下文。我自己也有同样的问题。有时用户名返回的是当前登录的用户,而不是您试图删除其角色的用户 其次,检查以确保您的代码没有删除您不希望删除的角色。这是我犯同样错误时遇到的两个问题。还要确保您正在使用成员资格提供程序获取成员资格用户对象,然后您可以使用该对象访问用户名 这是我的类似代码,但我循环浏览了一个复选框列表,其中的角色已经绑定并预先填充了用户已经拥有的选定角色 MembershipUser=Membership.GetUser(txtUserName.Text)
希望这有帮助。GS答案是,在dbo.aspnet_Roles表中有两个条目用于该角色,相同的RoleName和不同的loweredrolename,这似乎导致删除代码失败。好的,它适用于大多数角色-我发现一个有问题的角色是一个已重命名(通过SQL)的角色。根据您的建议,我现在已经得到了“无声失败”-Roles.RemoveUserFromRole不会失败-但角色也不会被删除…确保您没有使用Roles.IsUserInRole(“[rolename]”);您应该使用Roles.IsUserInRole(“[username]”,“[rolename]”);
string[] existingRoles = Roles.GetRolesForUser(userName);
foreach (string role in existingRoles)
{
if (!newRoles.Contains(role))
{
Authentication.AuthTraceStatic("Removing user {0} from role: {1}", userName, role);
lock(o)
{
if(Roles.IsUserInRole(userName, role))
Roles.RemoveUserFromRole(userName, role);
else
Authentication.AuthTraceStatic("Somebody is messing with my roles!!", userName, role);
}
}
}
//Update roles
foreach (ListItem role in cbRoles.Items)
{
if (role.Selected)
{
//if user is not in role
if (!Roles.IsUserInRole(user.UserName,role.Value))
{
Roles.AddUserToRole(user.UserName, role.Value);
}
}//role not selected
else
{
//if user is in a role that is no longer selected remove them
if (Roles.IsUserInRole(user.UserName, role.Value))
{
Roles.RemoveUserFromRole(user.UserName, role.Value);
}
}
}