Asp.net MVC UserManager登录不区分大小写的用户名

Asp.net MVC UserManager登录不区分大小写的用户名,asp.net,asp.net-mvc,asp.net-identity,Asp.net,Asp.net Mvc,Asp.net Identity,我正在尝试修复我的应用程序中的一个错误,当时用于登录的用户电子邮件是区分大小写的,而它应该是不区分大小写的 我正在使用以下代码在MVC中执行此操作: public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = _userManager.Find(model.UserName, model.Password);

我正在尝试修复我的应用程序中的一个错误,当时用于登录的用户电子邮件是区分大小写的,而它应该是不区分大小写的

我正在使用以下代码在MVC中执行此操作:

public ActionResult Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = _userManager.Find(model.UserName, model.Password);

        if (user != null)
        {
            SignIn(user, model.RememberMe);
            return RedirectToAction("List", "Survey");
        }

        ModelState.AddModelError("LoginFailure", "Invalid username or password.");
    }

    return View(model);
}
\u userManager
是一个
userManager
,是对标准AspNet标识
userManager
的覆盖。这似乎是在使用区分大小写的比较

我已经研究了许多解决这个问题的方法,包括一种显而易见的方法,即输入所有用户名时都使用小写或大写,并更改数据库以进行匹配,但是如果可能的话,我宁愿在不编辑数据库的情况下解决这个问题。我已经尝试过使用lambda表达式,但不幸的是,这些表达式对于Find方法似乎不起作用

数据库中的“我的用户名”列的排序规则为
SQL\u Latin1\u General\u CP1\u CI\u as
,我认为这使它对比较不区分大小写

我环顾四周已经有一段时间了,没有发现任何人抱怨完全相同的问题,除了在医院的那个人


我将非常感谢在这个问题上提供的任何帮助,如果这是唯一可能的方法,那么这些帮助不涉及数据库操作,甚至不涉及确认。谢谢。

感谢Sam Farajpour Ghamari的评论,我能够找到
UserStore
findUserByName
方法的覆盖并更改此代码:

public User GetByUsername(string username)
{
    return GetAll().FirstOrDefault(u => u.UserName == username);
}
为此:

public User GetByUsername(string username)
{
    return GetAll().FirstOrDefault(u => u.UserName.ToLower() == username.ToLower());
}

它成功了。谢谢你的帮助。

你好,希望我的代码对你有帮助

型号

public class Users
{
        [Key]
        public int Id { get; set; }

        [Required]
        public string Username { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
}
这是我的控制器

public ActionResult Login(Users model)
{
    using (var db = new YourDBContext())
    {
        //check if database for username
        var accountCheck = db.Users.FirstOrDefault(u => u.Username == model.Username);

        if (model.Username != null && accountCheck != null)
        {
            var userPass = db.Users.Where(u => u.Username == model.Username).Select(u => u.Password);
            //Materializes the query into a readable list of array objects
            var materializePass = userPass.ToList();
            //Since query will only result to one , we ony have one array of result
            var password = materializePass[0];

            //Check username and password (Case Sensitive)
            if (accountCheck.Username == model.Username &&  model.Password == password )
            {
                //Your code here to redirect
            }
        }
    }
}

您是否使用EF和默认EF的
UserStore
?默认
UserStore
的按名称查找用户是不区分大小写的。不,我们已经对其进行了重写,但从中我能够找出问题所在,谢谢。