首页 > 解决方案 > 输入错误的用户名和密码时如何给出错误

问题描述

我在 C# ASP.NET MVC5 中设置一个项目,当您输入错误的用户名和密码时,我试图给出一个错误。到目前为止,我已经尝试过使用 HandleError 属性但没有运气,现在我正在尝试使用 Membership.ValidateUser。

public ActionResult Login(User user)
        {
            using (CarsDBEntities db = new CarsDBEntities())
            {
                var usr = db.Users.Single(u => u.Email == user.Email && u.Password == user.Password);
                if (usr != null)
                {
                    Session["UserId"] = usr.UserId.ToString();
                    Session["Email"] = usr.Email.ToString();
                    Session["FirstName"] = usr.FirstName.ToString();
                    Session["LastName"] = usr.LastName.ToString();
                    return RedirectToAction("LoggedIn");
                }
                if (!Membership.ValidateUser(usr.Email, usr.Password))
                {
                    ModelState.AddModelError(string.Empty, "The user name or password is incorrect");
                    return View(user);
                }
                return View();
            }
        }

标签: c#sqlasp.netasp.net-mvc-5

解决方案


.Single()如果序列为空,则抛出异常,如果提供的电子邮件和密码不匹配,则会出现这种情况。从文档

InvalidOperationException
没有元素满足谓词中的条件。

-或者-

多个元素满足谓词中的条件。

-或者-

源序列为空。

.SingleOrDefault()如果序列为空,将在您的情况下返回 null,让您继续下一行的 null 检查。从其他文档

返回序列的单个特定元素,如果未找到该元素,则返回默认值。

所以试试:

var usr = db.Users.SingleOrDefault(u => u.Email == user.Email && u.Password == user.Password);

推荐阅读