【问题标题】:Problems in aspnet membership provideraspnet 会员提供程序中的问题
【发布时间】:2013-04-03 12:09:25
【问题描述】:

我正在使用 asp.net 会员

我通过编写此代码注销应用程序来注销应用程序

if (Membership.GetUser(HttpContext.Current.User.Identity).IsOnline) ;
{
    FormsAuthentication.SignOut();

    Response.Redirect(FormsAuthentication.LoginUrl);
}
Response.Redirect("loginpage.aspx");

然后我启动了应用程序并gettig验证代码块中的错误。下面我正在编写代码和错误消息

else if (User.Identity.IsAuthenticated == true && Membership.GetUser( Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)
{
    FormsAuthentication.SignOut();
    FormsAuthentication.RedirectToLoginPage();
    MembershipUser currUser = null;

    string gt = null;
    if (HttpContext.Current.User != null)
    {
        currUser = Membership.GetUser(true);
        gt = currUser.Email;
    }

    /// string temp = User.Identity.GetProfile().ID;
    //string query = "Insert into user_tbl(MemberID)(" + temp + ")";
    //Response.Redirect("UserPanel.aspx");
    //return;
}

这里Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)我收到这个错误

[ArgumentException:提供的提供者用户密钥无效。它 必须是 System.Guid 类型。参数名称:providerUserKey]

我找不到要做什么,我调试了应用程序,发现 User.Identity.Name 为 hash value

Stack Trace 
Exception Details: System.ArgumentException: The provider user key supplied is invalid.  It must be of type System.Guid.
Parameter name: providerUserKey

Source Error: 


Line 86:             }
Line 87: 
Line 88:             else if (User.Identity.IsAuthenticated == true && Membership.GetUser( Membership.FindUsersByName(User.Identity.Name)).IsOnline==true)
Line 89:             {
Line 90:                 

Source File: d:\31 May 2012\Demo\LoginPage.aspx.cs    Line: 88 

Stack Trace: 


[ArgumentException: The provider user key supplied is invalid.  It must be of type System.Guid.
Parameter name: providerUserKey]
   System.Web.Security.SqlMembershipProvider.GetUser(Object providerUserKey, Boolean userIsOnline) +2242996
   System.Web.Security.Membership.GetUser(Object providerUserKey, Boolean userIsOnline) +40
   System.Web.Security.Membership.GetUser(Object providerUserKey) +6
   LoginPage.Page_Load(Object sender, EventArgs e) in d:\31 May 2012\Demo\LoginPage.aspx.cs:88
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +36
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

【问题讨论】:

  • 试试Membership.GetUser(User.Identity.Name)
  • @Damith 我试过了,仍然是 NULL 引用错误,@sLaks 我要添加堆栈跟踪

标签: c# asp.net


【解决方案1】:

或者您也可以使用 Request.IsAuthenticated 来获取整个用户对象并仅检查身份验证。

【讨论】:

    【解决方案2】:

    根据 Visual Studio,Membership.FindUsersByName 返回 MembershipUserCollection。您将该对象传递给 Membership.GetUser 方法,该方法接受对象类型的参数,但该对象应该是用户的 ID(ASP.NET 中的 GUID)。因此,异常是意料之中的:您试图传递一组用户,而该方法需要一个用户 ID。

    如果您需要检查用户当前是否登录,您可以简单地这样做:

    if (Membership.GetUser() != null)
    

    有关该方法的更多信息,请参阅this MSDN Library 文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多