ASP.NET MVC身份。无法为具有特殊字符的用户添加角色

时间:2019-06-07 08:41:58

标签: asp.net-mvc asp.net-identity roles

在我的MVC Web应用程序中,我将ASP Identity用于用户登录以及基于角色的授权。

我面临的问题是使用具有特殊字符的电子邮件向用户添加角色。例如。 test'test@123.com

我可以毫无问题地创建/注册具有特殊字符的用户,仅当我尝试向该特定用户添加角色时才会出现问题。

我尝试将身份配置文件更改为User Validator

  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");
    }

我添加了断点,操作成功完成,但是我认为问题在于正在创建角色,但不是针对用户名中的特定字符。即在添加角色之前用其他字符替换“'”,因此为什么未将该角色分配给该用户。

尽管用户名中包含特殊字符,但预期结果将是将角色添加到用户。

注意:到目前为止,这似乎是撇号的问题。 用户也基于电子邮件。

1 个答案:

答案 0 :(得分:0)

因此,借助@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");
    }