MVC - Roles.AddUserToRole создает исключение ProviderException. Пользователь @username не был найден
Я впервые использую RoleManager, и у меня возникла проблема с добавлением имени пользователя в роль. Цель состоит в том, чтобы проверить, является ли пользователь (который в настоящее время входит в систему) администратором или нет (isAdmin = 1
в базе данных SQL). То, что я использую в моем LoginController:
var usr = db.Users.Where(u => u.UserName.ToLower() == userLogin.UserName.ToLower() &&
u.Password.Equals(userLogin.Password, StringComparison.Ordinal)).FirstOrDefault();
if (usr != null)
{
FormsAuthentication.SetAuthCookie(usr.UserName, false);
if (usr.IsAdmin == true)
{
if(!Roles.RoleExists("Admin"))
Roles.CreateRole("Admin");
var x = Roles.GetAllRoles();
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
Roles.AddUserToRole(usr.UserName, "Admin");
}
return RedirectToAction("Index", "Home");
}
Я устанавливаю точки останова в каждой из этих строк, и Roles.CreateRole("Admin");
никогда не достигается, что подразумевает, что есть роль с именем "Администратор". Тем не мение, var x = Roles.GetAllRoles();
всегда показывает ноль.
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
всегда достигается, так что пользователь в настоящее время не назначен на эту роль, но я получаю исключение ProviderException на следующей строке с дополнительной информацией: "Пользователь"_username"не найден.
My Web Config на случай, если это кому-нибудь понадобится:
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear />
<add name="MyRoleProvider" type="System.Web.Providers.DefaultRoleProvider"
connectionStringName="StoreFrontConnectionString" applicationName="/"/>
</providers>
</roleManager>
Любая помощь будет принята с благодарностью.
1 ответ
Я только что обошел эту проблему сам, и, возможно, у вас та же проблема.
В моем случае мой web.config был немного не прав. Убедитесь, что параметр applicationName для вашего провайдера профиля, провайдера членства и менеджера ролей одинаков в каждом случае. У меня была опечатка в одном из них, и это означало, что пользователь, который выглядел так, как будто он был на самом деле для другого приложения, поэтому, когда я вызвал AddUserToRole, он выдал исключение.