我的mvc应用程序上有一个简单的登录表单,除了当您尝试使用不在数据库中的用户登录时,它才能正常工作。
它将抛出一个错误Sequence contains no elements
,这是有道理的,因为数据库中没有匹配的用户,尽管我尝试在它没有执行的代码中处理它。
// POST: Login User
[HttpPost]
public ActionResult Login(UserAccount user)
{
using (MyDbContext db = new MyDbContext())
{
var usr = db.Users.Single(u => u.UserName == user.UserName && u.UserPassword == UserPassword);
if (usr != null)
{
Session["UserID"] = usr.UserId.ToString();
Session["Username"] = usr.UserName.ToString();
return RedirectToAction("LoggedIn");
}
else
{
ModelState.AddModelError("", "Username or Password Incorrect");
}
}
return View();
}
答案 0 :(得分:3)
Single
将抛出异常,或者找到太多匹配项。在没有找到匹配项的情况下,使用SingleOrDefault
之类的方法会返回null:
var usr = db.Users.SingleOrDefault(...)
这会让你为之后正在进行的空检查做好准备。
答案 1 :(得分:1)
所以......正如有些人在上面的评论中所说,你可以简单地使用以下查询,然后进行空检查:
var usr = db.Users.SingleOrDefault(u => u.UserName == user.UserName && u.UserPassword == UserPassword);
话虽这么说,我建议使用内置的ASP Identity框架进行身份验证和授权 - 除非您需要为您的应用程序定制实现,否则您可以避免大量测试(和潜在的错误)以及获取一大堆很酷的开箱即用功能。我建议您查看the resources here以获取更多信息。