Membership.GetUser()。ProviderUserKey始终返回null
我最近开始使用ASP.NET Forms Authentication和Membership。
我在Visual Studio中创建了一个C#项目,它自动创建了像“/Account/Login.aspx”这样的页面。
然后我按照一个示例将aspnet_*
表安装到我的SQL Server数据库中,并且我已经能够使用控件来创建用户。
我之后能够以此用户身份登录,并在调用时显示登录的用户名
但是,当我在C#代码中调用以下内容时,在Button Click事件处理程序中,我总是得到一个Null Reference Exception:
string UserID = Membership.GetUser().ProviderUserKey.ToString();
不应该从我的aspnet_users表中返回UserID
吗?
如果显示UserName值,我不应该总是能够调用
Membership.GetUser().ProviderUserKey
首先检查您是否拥有有效的经过身份validation的用户ID。 从你的问题来看,这听起来像你有。 但是一系列检查总是一种很好的做法。
我喜欢使用这些方法(第二个调用第一个,但你也可以直接调用第一个。我建议调用第二个)执行各种检查并返回用户ID,如果有用户则返回null未经过身份validation或身份不明的:
public static MembershipUser GetCurrentUser() { HttpContext httpContext = HttpContext.Current; if (httpContext != null && httpContext.User != null && httpContext.User.Identity.IsAuthenticated) { return Membership.GetUser(); } return null; } /// /// 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 /// /// 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; }