我在高流量网站上遇到一个奇怪的问题,通常在每两天发生一次。我有一个付款表单,我要求用户同时创建登录信息(如果他们之前没有登录)。
我的应用程序是在ASP.NET MVC
上开发的,并使用Membership
进行用户管理。这是在处理付款
MVC Action
顶部的一段代码
if (!IsUserLoggedIn())
{
var isUserExist = _userService.GetUserByName(model.NewUser.UserName) != null;
if (isUserExist)
{
ModelState.AddModelError("", "UserName Already Exist");
return View();
}
}
private bool IsUserLoggedIn()
{
return User.Identity.IsAuthenticated;
}
这就是我的数据访问代码的样子
public EditUser GetUserByName(string userName)
{
var user = DataContext.aspnet_Users
.Join(DataContext.aspnet_Membership,
u => u.UserId,
m => m.UserId,
(u, m) => new { User = u, Membership = m })
.SingleOrDefault(s => s.User.UserName == userName &&
s.User.UserId == s.Membership.UserId);
if(user!=null)
{
return new EditUser(....);
}
return null;
}
问题是当某人尚未登录我的网站并进入付款页面并尝试创建他的登录信息时。表单提交时,错误消息返回" UserName已经存在"当它实际上没有。这意味着,这个新用户已经存在于数据库中,但上面的代码仍然表明用户已经存在,这真的很奇怪。