Reflector 显示 Membership.GetCurrentUserName 的实现是:
private static string GetCurrentUserName()
{
if (HostingEnvironment.IsHosted)
{
HttpContext current = HttpContext.Current;
if (current != null)
{
return current.User.Identity.Name;
}
}
IPrincipal currentPrincipal = Thread.CurrentPrincipal;
if ((currentPrincipal != null) && (currentPrincipal.Identity != null))
{
return currentPrincipal.Identity.Name;
}
return string.Empty;
}
乍一看,最可能的解释是:
所有其他路径似乎都对 null 进行了测试。
所以我建议你跟踪HttpContext.User的类型和内容。
HttpContext.Current.User 是一个 IPrincipal,并且我所知道的 IPrincipal 的大多数具体实现都不允许空标识,所以我打赌 HttpContext.User 为空。