c# - 输入错误的用户名和密码时如何给出错误
问题描述
我在 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();
}
}
解决方案
.Single()
如果序列为空,则抛出异常,如果提供的电子邮件和密码不匹配,则会出现这种情况。从文档:
InvalidOperationException
没有元素满足谓词中的条件。-或者-
多个元素满足谓词中的条件。
-或者-
源序列为空。
.SingleOrDefault()
如果序列为空,将在您的情况下返回 null,让您继续下一行的 null 检查。从其他文档:
返回序列的单个特定元素,如果未找到该元素,则返回默认值。
所以试试:
var usr = db.Users.SingleOrDefault(u => u.Email == user.Email && u.Password == user.Password);
推荐阅读
- python - 通过用户交互在最小值和最大值之间切换
- r - 匹配字符串; 和 %
- jmeter - 在 Jmeter 中每 10 分钟执行一次采样器
- python - Django 中的模型层次结构
- asp.net-core - 在 ASP.NET Core 2.2 控制台应用程序中,有没有办法为整个用户浏览器会话保留 httpcontext.connection.id
- node.js - Express-getting this error message试图运行服务器
- google-cloud-platform - 谷歌云调度程序是否可以以给定的频率将数据列表推送到发布/订阅?
- c# - 具有可选关系的 EF Core 3.1 DeleteBehavior.SetNull 触发约束异常
- java - ActiveMQ 5.15.11 Java 版本支持
- python - 使用 ctypes 传递 2d numpy 数组时出现分段错误(核心转储)