【发布时间】:2012-03-03 21:08:32
【问题描述】:
我最近收到了一些错误报告,这些报告似乎表明有时 User.Identity.Name 是 NULL 或与应有的不同(经过身份验证的用户的用户名),即使页面经过身份验证也是如此:
[Authorize]
[HttpGet]
public ActionResult MyAction()
{
string username = User.Identity.Name;
Member member = memberRepository.GetMemberByUserName(username);
member.something // fails with a null reference exception
}
GetMemberByUserName() 方法使用 Linq to SQL 检索成员。
public Member GetMemberByUsername(string username)
{
if (String.IsNullOrEmpty(username))
return null;
return db.Members.SingleOrDefault(d => d.username.Equals(username));
}
在什么情况下会发生这种情况?每次使用时都需要检查 User.Identity.Name 是否为NULL?
当然,User.Identity.Name 可能是一个红鲱鱼,也可能是数据库没有返回任何内容。不过,如果是这种情况,我可能会预料到会引发异常。
编辑: 这是一个间歇性问题 - 可能是经过身份验证的用户刷新一次,User.Identity.Name 是正确的并检索到成员,然后在第二次刷新时,未检索到成员。
【问题讨论】:
-
这里唯一可能的返回情况是返回 null 或空成员。
-
检查
User.Identity.Name返回的内容以及数据库中是否存在此类值。希望能给你提示。 -
肯定在数据库里。此代码间歇性出错。
标签: asp.net asp.net-mvc authentication