我构建了一个查询以通过用户名查找用户。当我运行程序时,我得到:
InvalidOperationException:序列包含多个元素
我检查了测试数据库,只有 4 个用户,没有双重名称。异常可能来自哪里?这是查询:
public void setUser(String userName)
{
AzaraUser = DatabaseConnection.DataContext.GetTable<AzaraUser>()
.SingleOrDefault(a => a.ProgramUserName == userName || a.UserName == userName);
}
使用下面的提示我尝试调试,发现方法变成了一个空字符串。因此,在这种情况下,我收到多个响应是正常的,因为 ProgramUserName 仅在几行中不为空,因为它适用于使用 Active Directory 帐户登录的用户。
但是为什么我会得到这个空字符串?会不会 WebSecurity 在那一刻也是空的?什么时候会得到当前用户的信息?
这是我的登录方法:
[HttpPost]
public ActionResult Login(FormCollection logInForm)
{
// try the default membership auth
if (Membership.ValidateUser(logInForm["name"], logInForm["password"]))
{
FormsAuthentication.SetAuthCookie(logInForm["name"], false);
user.setUser(WebSecurity.CurrentUserName);
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl == null)
{
Response.Redirect("~/home/index");
}
else
{
Response.Redirect(returnUrl);
}
}
else
{
ModelState.AddModelError("", "Login failed");
}
// try to auth user via AD
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
if (pc.ValidateCredentials(logInForm["name"], logInForm["password"]))
{
FormsAuthentication.SetAuthCookie(logInForm["name"], false);
user.setUser(WebSecurity.CurrentUserName);
return RedirectToAction("Index", "Home");
}
}
return View("LogOn");
}