在我的 MVC Web 应用程序中,我将 ASP 身份用于用户登录以及基于角色的授权。
我面临的问题是使用具有特殊字符的电子邮件向用户添加角色。例如。test'[email protected]
我可以毫无问题地创建/注册具有特殊字符的用户,只有当我尝试向该特定用户添加角色时才会出现问题。
我尝试将身份配置文件更改为用户验证器
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
这是向用户添加角色的代码。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
var context = new HolidayTracker.Models.ApplicationDbContext();
if (context == null)
{
throw new ArgumentNullException("context", "Context must not be null.");
}
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(user.Id, RoleName);
ViewBag.Message = "Role created successfully !";
// Repopulate Dropdown Lists
var rolelist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name, Text = rr.Name }).ToList();
ViewBag.Roles = rolelist;
var userlist = context.Users.OrderBy(u => u.UserName).ToList().Select(uu =>
new SelectListItem { Value = uu.UserName, Text = uu.UserName }).ToList();
ViewBag.Users = userlist;
return View("Index");
}
我添加了断点并且操作成功完成,但我认为问题是正在创建角色,但不是为用户名中的特定字符创建的。即它在添加角色之前用其他字符替换“'”,因此为什么没有将该角色分配给该用户。
尽管用户名中有特殊字符,但预期的结果是将角色添加到用户。
注意:截至目前,这似乎是撇号的问题。用户也基于电子邮件。
所以多亏了@CodeCaster 的帮助,我才能够找到路由问题并添加了一个验证器。
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
var context = new HolidayTracker.Models.ApplicationDbContext();
if (context == null)
{
throw new ArgumentNullException("context", "Context must not be null.");
}
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };
userManager.AddToRole(user.Id, RoleName);
var Check = userManager.AddToRole(user.Id, RoleName);
ViewBag.Message = "Role created successfully !";
// Repopulate Dropdown Lists
var rolelist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name, Text = rr.Name }).ToList();
ViewBag.Roles = rolelist;
var userlist = context.Users.OrderBy(u => u.UserName).ToList().Select(uu =>
new SelectListItem { Value = uu.UserName, Text = uu.UserName }).ToList();
ViewBag.Users = userlist;
return View("Index");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句