Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Membership.GetUser().ProviderUserKey始终返回null_C#_Asp.net_Asp.net Membership_Forms Authentication - Fatal编程技术网

C# Membership.GetUser().ProviderUserKey始终返回null

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

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

我在VisualStudio中创建了一个C#项目,它会自动创建像“/Account/Login.aspx”这样的页面

然后,我按照一个示例将
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]