c# - Membership.GetUser().ProviderUserKey 总是返回 null

标签 c# asp.net asp.net-membership forms-authentication

我最近开始使用 ASP.NET 表单例份验证和成员资格。

我在 Visual Studio 中创建了一个 C# 项目,它会自动创建类似“/Account/Login.aspx”的页面。

然后我按照安装示例 aspnet_*表到我的 SQL Server 数据库,我已经能够使用 <asp:CreateUserWizardStep>控制创建用户。

然后我就能够以该用户身份登录,并且在调用 <asp:LoginName> 时会出现登录的用户名

但是,当我在 C# 代码中调用以下代码时,在 Button Click 事件处理程序中,我总是会遇到空引用异常:

string UserID = Membership.GetUser().ProviderUserKey.ToString();

这不应该返回 UserID吗?来 self 的 aspnet_users 表?

如果<asp:LoginName>正在显示一个 UserName 值,我不应该总是能够调用 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;
    }

关于c# - Membership.GetUser().ProviderUserKey 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7146830/

相关文章:

c# - 更改 ActiveViewIndex 后 ASP 按钮不工作

html - 如何转换 css 代码以支持 Safari、Opera 和 Chrome?

asp.net-membership - 如何在成员(member)资格提供者上最好地实现自定义搜索

c# - QueryOver 查找别名字符串

c# - 我需要将 XML 字符串转换为 XmlElement

c# - 如何在 C# 中计算 float 的平方根

javascript - 带有单选按钮的 asp.net 多个 GridView

.net - ASP.NET:为什么登录引用不包括端口

c# - 如何在现有数据库中实现 ASP.NET Identity 2.0?

c# - 实时数据库不接受十进制值