C# Membership.GetUser().ProviderUserKey始终返回null
我最近开始使用ASP.NET表单身份验证和成员资格 我在VisualStudio中创建了一个C#项目,它会自动创建像“/Account/Login.aspx”这样的页面 然后,我按照一个示例将C# Membership.GetUser().ProviderUserKey始终返回null,c#,asp.net,asp.net-membership,forms-authentication,C#,Asp.net,Asp.net Membership,Forms Authentication,我最近开始使用ASP.NET表单身份验证和成员资格 我在VisualStudio中创建了一个C#项目,它会自动创建像“/Account/Login.aspx”这样的页面 然后,我按照一个示例将aspnet.*表安装到我的SQL Server数据库中,并且能够使用控件创建用户 然后我就可以以该用户的身份登录,并且在调用 然而,当我在我的C#代码中调用以下内容时,在按钮单击事件处理程序中,我总是得到一个空引用异常: string UserID = Membership.GetUser().Provi
aspnet.*
表安装到我的SQL Server数据库中,并且能够使用
控件创建用户
然后我就可以以该用户的身份登录,并且在调用
然而,当我在我的C#代码中调用以下内容时,在按钮单击事件处理程序中,我总是得到一个空引用异常:
string UserID = Membership.GetUser().ProviderUserKey.ToString();
这不应该从我的aspnet\u users表返回UserID
如果
显示用户名值,我是否应该始终能够调用Membership.GetUser().ProviderUserKey
首先检查您是否具有有效的经过身份验证的用户id。从您的问题来看,听起来您确实拥有。但一系列的检查始终是一种良好的做法
我喜欢使用这两种方法(第二种方法调用第一种方法,但您也可以直接调用第一种方法。我建议调用第二种方法),它们执行各种检查,如果用户未经身份验证或身份不明,则返回用户ID或null:
public static MembershipUser GetCurrentUser()
{
HttpContext httpContext = HttpContext.Current;
if (httpContext != null && httpContext.User != null && httpContext.User.Identity.IsAuthenticated)
{
return Membership.GetUser();
}
return null;
}
/// <summary>
/// Safe check of authenticity. Better than Request.IsAuthenticated in that if there's a used-to-be-valid cookie which does not correspond to the current database, it will fail safe
/// </summary>
/// <returns></returns>
public static bool IsUserAuthenticated()
{
if (HttpContext.Current == null)
return false;
var request = HttpContext.Current.Request;
if (!request.IsAuthenticated)
return false;
var membershipUser = GetCurrentUser();
if (membershipUser != null)
return true;
return false;
}
public静态成员身份用户GetCurrentUser()
{
HttpContext HttpContext=HttpContext.Current;
if(httpContext!=null&&httpContext.User!=null&&httpContext.User.Identity.IsAuthenticated)
{
返回Membership.GetUser();
}
返回null;
}
///
///安全检查真实性。比Request.IsAuthentication更好,因为如果存在与当前数据库不对应的过去有效的cookie,它将是故障安全的
///
///
公共静态bool IsUserAuthenticated()
{
if(HttpContext.Current==null)
返回false;
var request=HttpContext.Current.request;
如果(!request.IsAuthenticated)
返回false;
var membershipUser=GetCurrentUser();
if(membershipUser!=null)
返回true;
返回false;
}
你什么时候叫这个?在登录代码本身中,您将获得用户的null
。您肯定会获得NullReferenceException
,因为Membership.GetUser()
返回的用户对象是null
。因此,在请求提供ProviderUserKey
@Henk Holterman我在按钮单击事件中调用它之前,应该检查一下这一点Handler@Tim施梅尔特我很感激,但为什么?如果
显示用户名值,我是否应该始终能够调用Membership.GetUser().ProviderUserKey
?这个答案对我很有帮助。我知道我遗漏了一些明显的东西[InitializeSimpleMembership]